home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 22 / Cream of the Crop 22.iso / program / inter52b.zip / INTERRUP.I < prev    next >
Text File  |  1996-10-20  |  362KB  |  9,468 lines

  1. Interrupt List, part 9 of 15
  2. Copyright (c) 1989,1990,1991,1992,1993,1994,1995,1996 Ralf Brown
  3. --------D-21FF-------------------------------
  4. INT 21 - DOS v2.11-2.13 - OEM FUNCTION
  5.     AH = FFh
  6. Return: AL = 00h if no OEM function handler installed (see AH=F8h"OEM")
  7. SeeAlso: AH=F8h"OEM",AH=FEh"OEM"
  8. --------K-21FF-------------------------------
  9. INT 21 - CED (Command EDitor) - INSTALLABLE COMMANDS
  10.     AH = FFh
  11.     AL = subfunction
  12.         00h add installable command
  13.         BL = mode
  14.             bit 0 = 1 callable from DOS prompt
  15.             bit 1 = 1 callable from application
  16.         DS:SI -> CR-terminated command name
  17.         ES:DI -> FAR routine entry point
  18.         01h remove installable command
  19.         DS:SI -> CR-terminated command name
  20.         02h reserved, may be used to test for CED installation
  21. Return: CF clear if successful
  22.     CF set on error
  23.         AX = error code
  24.         01h invalid function
  25.         02h command not found (subfunction 01h only)
  26.         08h insufficient memory (subfunction 00h only)
  27.         0Eh bad data (subfunction 00h only)
  28.     AH = FFh if CED not installed
  29. Program: CED is a shareware DOS command-line enhancer by Christopher J. Dunford
  30. SeeAlso: AX=0A00h
  31. --------E-21FF-------------------------------
  32. INT 21 - DJ GO32.EXE 80386+ DOS extender - DOS EXTENSIONS
  33.     AH = FFh
  34.     AL = function
  35.         01h create file
  36.         02h open file
  37.         03h get file statistics
  38.         04h get time of day
  39.         05h set time of day
  40.         06h stat
  41.         07h system
  42. Program: GO32.EXE is a DOS extender included as part of the 80386 port of the
  43.       GNU C/C++ compiler by DJ Delorie and distributed as DJGPP
  44. SeeAlso: INT 10/AH=FFh"GO32"
  45. --------K-21FF-------------------------------
  46. INT 21 - DOSED.COM - INSTALLATION CHECK
  47.     AH = FFh
  48.     DS:SI -> "DOSED"
  49.     ES = 0000h
  50. Return: ES:DI -> "DOSED" if installed
  51. Program: DOSED is a free DOS commandline editor/history buffer by Sverre H.
  52.       Huseby
  53. --------v-21FF-------------------------------
  54. INT 21 - VIRUS - "Sunday", "Tumen 0.5", "Hero" - INSTALLATION CHECK
  55.     AH = FFh
  56. Return: AH = 00h if "Tumen 0.5" or "Hero" resident
  57.     AX = 0400h if "Sunday" resident
  58. SeeAlso: AX=FEDCh"VIRUS",AX=FF01h"VIRUS"
  59. --------E-21FF-------------------------------
  60. INT 21 UP - Rational Systems DOS/4GW - API
  61.     AH = FFh
  62.     DH = function (00h-17h) (also see separate entries below)
  63.     DL = subfunction or argument
  64. Return: CF clear if valid function number
  65.         AX = status???
  66.     CF set if invalid function
  67. SeeAlso: INT 15/AX=BFDCh
  68. --------E-21FF--DH00-------------------------
  69. INT 21 UP - Rational Systems DOS/4GW - GET VERSION???
  70.     AH = FFh
  71.     DH = 00h
  72.     DL = ??? (78h seen)
  73. Return: CF clear
  74.     EAX = 4734FFFFh (high word is byte-swapped "4G") if DOS/4G installed
  75. Note:    Quarterdeck's DESQview/X X Toolkit library uses this call to determine
  76.       whether the direct-mapped linear 4GB segment's selector is 34h or 38h
  77. SeeAlso: INT 21/AH=FFh/DH=00h"DOS/4GW"
  78. --------E-21FF--DH02-------------------------
  79. INT 21 UP - Rational Systems DOS/4GW - SET ???
  80.     AH = FFh
  81.     DH = 02h
  82.     DL = ???
  83. Return: CF clear
  84. --------E-21FF--DH05-------------------------
  85. INT 21 UP - Rational Systems DOS/4GW - ???
  86.     AH = FFh
  87.     DH = 05h
  88.     BX = ???
  89. Return: ???
  90. --------E-21FF--DH06-------------------------
  91. INT 21 UP - Rational Systems DOS/4GW - ???
  92.     AH = FFh
  93.     DH = 06h
  94.     BX = ???
  95. Return: ???
  96. --------E-21FF--DH07-------------------------
  97. INT 21 UP - Rational Systems DOS/4GW - ???
  98.     AH = FFh
  99.     DH = 07h
  100.     BX = ???
  101. Return: ???
  102. --------E-21FF--DH08-------------------------
  103. INT 21 UP - Rational Systems DOS/4GW - ???
  104.     AH = FFh
  105.     DH = 08h
  106.     BX = ???
  107.     CX = ???
  108.     ES = ???
  109. Return: ???
  110. --------E-21FF--DH09-------------------------
  111. INT 21 UP - Rational Systems DOS/4GW - GET ???
  112.     AH = FFh
  113.     DH = 09h
  114. Return: ES:BX -> ???
  115. --------E-21FF--DH0A-------------------------
  116. INT 21 UP - Rational Systems DOS/4GW - ???
  117.     AH = FFh
  118.     DH = 0Ah
  119.     AL = ???
  120.     BX = ???
  121.     CX = ???
  122. Return: ES = ??? or 0000h
  123. --------E-21FF--DH0B-------------------------
  124. INT 21 UP - Rational Systems DOS/4GW - ???
  125.     AH = FFh
  126.     DH = 0Bh
  127.     AL = ???
  128.     BX = ???
  129.     CX = ???
  130. Return: ???
  131. --------E-21FF--DH0C-------------------------
  132. INT 21 UP - Rational Systems DOS/4GW - GET/SET ???
  133.     AH = FFh
  134.     DH = 0Ch
  135.     DL = ??? (00h or 01h)
  136. Return: CF clear if successful
  137.         AL = previous value of ???
  138.     CF set on error (DL out of range)
  139.         AX = FFFFh
  140. --------E-21FF--DH0D-------------------------
  141. INT 21 UP - Rational Systems DOS/4GW - ???
  142.     AH = FFh
  143.     DH = 0Dh
  144.     ???
  145. Return: ???
  146. --------E-21FF--DH0E-------------------------
  147. INT 21 UP - Rational Systems DOS/4GW - ???
  148.     AH = FFh
  149.     DH = 0Eh
  150. Return: DX:AX -> XBRK structure (see #0410 at INT 15/AX=BF02h)
  151.     BX = ???
  152.     CX = ???
  153. SeeAlso: INT 15/AX=BF02h
  154. --------E-21FF--DH0F-------------------------
  155. INT 21 UP - Rational Systems DOS/4GW - ???
  156.     AH = FFh
  157.     DH = 0Fh
  158.     ???
  159. Return: ???
  160. --------E-21FF--DH10-------------------------
  161. INT 21 UP - Rational Systems DOS/4GW - ???
  162.     AH = FFh
  163.     DH = 10h
  164.     AL = ???
  165.     BX = ???
  166.     CX = ???
  167.     DI = ???
  168.     SI = ???
  169. Return: ???
  170. Note:    among other things, frees two memory blocks via INT 21/AH=49h
  171. --------E-21FF--DH11-------------------------
  172. INT 21 UP - Rational Systems DOS/4GW - NOP
  173.     AH = FFh
  174.     DH = 11h
  175. --------E-21FF--DH12-------------------------
  176. INT 21 UP - Rational Systems DOS/4GW - EXCHANGE ??? POINTERS
  177.     AH = FFh
  178.     DH = 12h
  179.     DS:SI -> new ???
  180.     ES:DI -> new ???
  181. Return: DS:SI -> previous ???
  182.     ES:DI -> previous ???
  183. --------E-21FF--DH13-------------------------
  184. INT 21 UP - Rational Systems DOS/4GW - ???
  185.     AH = FFh
  186.     DH = 13h
  187.     AL = ???
  188.     ES = ???
  189. Return: ???
  190. --------E-21FF--DH14-------------------------
  191. INT 21 UP - Rational Systems DOS/4GW - ???
  192.     AH = FFh
  193.     DH = 14h
  194.     BX = ???
  195.     CX = ???
  196. Return: CF clear
  197.         AX = ???
  198.         DX = ???
  199. --------E-21FF--DH15-------------------------
  200. INT 21 UP - Rational Systems DOS/4GW - GET ??? FUNCTIONS
  201.     AH = FFh
  202.     DH = 15h
  203. Return: CF clear
  204.         DX:AX -> FAR function for ???
  205.         CX:BX -> FAR function for ???
  206.         SI:DI -> FAR function for ???
  207. --------E-21FF--DH16-------------------------
  208. INT 21 UP - Rational Systems DOS/4GW - GET ???
  209.     AH = FFh
  210.     DH = 16h
  211. Return: AX = ???
  212. --------E-21FF--DH17-------------------------
  213. INT 21 UP - Rational Systems DOS/4GW - ???
  214.     AH = FFh
  215.     DH = 17h
  216.     AL = ???
  217.     DL = ???
  218. Return: ???
  219. --------N-21FF00-----------------------------
  220. INT 21 - TopWare Network OS v5.10+ - GET SYSTEM INFORMATION
  221.     AX = FF00h
  222.     CL = what to get
  223.         00h user information (see #1864)
  224.         01h drive mapping (see #1865)
  225.         02h printer server(s)
  226.         05h local DOS drive number
  227. Return: ES:BX -> desired information
  228. Program: TopWare Network Operating System is manufactured by Grand Computer
  229.       Company
  230. Note:    this call is only supported on Workstations, not on the server
  231. SeeAlso: AX=FF04h,INT 2F/AX=FF00h
  232.  
  233. Format of TopWare user information:
  234. Offset    Size    Description    (Table 1864)
  235.  00h    BYTE    node ID
  236.  01h 15 BYTEs    user name
  237.  10h    WORD    user number
  238.  12h    BYTE    group number
  239.  
  240. Format of TopWare drive mapping [array]:
  241. Offset    Size    Description    (Table 1865)
  242.  00h    BYTE    bits 6-0: drive number (1=A:, etc.)
  243.         bit 7: this is a server drive
  244.  01h  3 BYTEs    mapping drive (for example, "C:\")
  245.  04h 64 BYTEs    current directory
  246. --------E-21FF00DX0078-----------------------
  247. INT 21 - Rational Systems DOS/4G - INSTALLATION CHECK
  248.     AX = FF00h
  249.     DX = 0078h
  250. Return: AL <> 00h if installed
  251.         GS = segment of kernel if nonzero
  252. SeeAlso: INT 15/AX=BF02h
  253. --------v-21FF01-----------------------------
  254. INT 21 - VIRUS - "Drop" - INSTALLATION CHECK
  255.     AX = FF01h
  256. Return: AX = 01FFh if resident
  257. SeeAlso: AH=FEh"VIRUS",AX=FF0Fh"FLU_SHOT"
  258. --------N-21FF04-----------------------------
  259. INT 21 - TopWare Network OS v5.10+ - GET/SET DEFAULT FILE PROTECTION ATTRIBS
  260.     AX = FF04h
  261.     CL = function
  262.         00h get protections
  263.         Return: BH = read attribute
  264.             BL = write attribute
  265.         01h set protections
  266.         BH = read attribute
  267.         BL = write attribute
  268. Note:    this function is supported only on Workstations, not on the server
  269. SeeAlso: AX=FF00h"TopWare"
  270. --------v-21FF0F-----------------------------
  271. INT 21 - FLU_SHOT+ v1.83 - INSTALLATION CHECK
  272.     AX = FF0Fh
  273. Return: AX = 0101h if resident
  274. Program: FLU_SHOT+ is an antivirus/antitrojan program by Ross M. Greenberg and
  275.       Software Concepts Design
  276. Note:    the "PSQR/1720" virus calls this function to determine whether
  277.       FLU_SHOT+ is present
  278. SeeAlso: AH=FFh"VIRUS",AX=FF10h"VIRUS"
  279. --------v-21FF10-----------------------------
  280. INT 21 - VIRUS - "Twins" - INSTALLATION CHECK
  281.     AX = FF10h
  282. Return: AL = 07h if resident
  283. SeeAlso: AX=FF0Fh,AX=FFFEh
  284. --------N-21FF80DHFF-------------------------
  285. INT 21 - TopWare Network OS v5.10+ - SEND MESSAGE
  286.     AX = FF80h
  287.     DH = FFh
  288.     DL = destination address (FFh for broadcast)
  289.     CX = message length (max 2000)
  290.     DS:SI -> message to be sent (see #1866)
  291. Return: nothing
  292. Program: TopWare Network Operating System is manufactured by Grand Computer
  293.       Company
  294. Notes:    this function is supported on both Workstations and the server
  295.     there is no guarantee that the message will be received correctly, or
  296.       at all, by the destination
  297.  
  298. Format of TopWare message:
  299. Offset    Size    Description    (Table 1866)
  300.  00h    BYTE    type code
  301.         07h TopSend
  302.         11h user application
  303.         other reserved for TopWare
  304.  01h    var    data
  305. Note:    sending messages with a type code other than 11h will cause
  306.       unpredictable results
  307. --------N-21FF82-----------------------------
  308. INT 21 - TopWare Network OS v5.10+ - GET STATION ADDRESS
  309.     AX = FF82h
  310. Return: AL = station address
  311. Note:    this function is supported on both Workstations and the server
  312. SeeAlso: AX=FF91h
  313. --------N-21FF8C-----------------------------
  314. INT 21 - TopWare Network OS v5.10+ - GET STATUS OF TopShow/Emulated FUNCTION
  315.     AX = FF8Ch
  316.     BL = subfunction
  317.         00h get TopShow status
  318.         FFh get Emulated status
  319. Return: AL = status
  320.         00h not installed
  321.         01h already installed
  322. --------N-21FF8D-----------------------------
  323. INT 21 - TopWare Network OS v5.10+ - CALL TopShow FUNCTION
  324.     AX = FF8Dh
  325.     CH = monochrome flag (01h monochrome, 00h not monochrome)
  326.     CL = screen mode of station to be viewed (see #1867)
  327.     BL = graphic page number for monochrome
  328. Return: AL = status (00h successful, else failed)
  329. SeeAlso: AX=FF8Eh,AX=FFCFh
  330.  
  331. (Table 1867)
  332. Values for TopWare screen mode:
  333.  00h    text mode
  334.  01h    720x348
  335.  02h    640x408
  336.  03h    720x352
  337.  04h    640x390
  338.  05h    reserved
  339. --------N-21FF8E-----------------------------
  340. INT 21 - TopWare Network OS v5.10+ - CANCEL TopShow FUNCTION
  341.     AX = FF8Eh
  342. Return: AL = 00h (successful, TopShow removed)
  343. SeeAlso: AX=FF8Dh
  344. --------N-21FF91-----------------------------
  345. INT 21 - TopWare Network OS v5.10+ - GET FILE SERVER STATION NUMBER
  346.     AX = FF91h
  347. Return: AL = station number of file server
  348. SeeAlso: AX=FF82h
  349. --------N-21FF97-----------------------------
  350. INT 21 - TopWare Network OS v5.10+ - GET MAXIMUM STATION NUMBER (server only)
  351.     AX = FF97h
  352. Return: AL = maximum station number
  353. SeeAlso: AX=FF98h
  354. --------N-21FF98-----------------------------
  355. INT 21 - TopWare Network OS v5.10+ - GET MAXIMUM FILE NUMBER (server only)
  356.     AX = FF98h
  357. Return: AL = maximum file
  358. SeeAlso: AX=FF97h
  359. --------N-21FF9A-----------------------------
  360. INT 21 - TopWare Network OS v5.10+ - RECEIVE OF USER-DEFINED PACKETS
  361.     AX = FF9Ah
  362.     ES:BX -> buffer for user-defined packet (see #1868)
  363. Return: nothing
  364.  
  365. Format of TopWare user-defined packet:
  366. Offset    Size    Description    (Table 1868)
  367.  00h    BYTE    FFh
  368.  01h    WORD    (call) length of data field plus 3
  369.         (ret) length of received message (0000h if none received)
  370.  03h    BYTE    destination ID (FFh for broadcast message)
  371.  04h    BYTE    sending station ID
  372.  05h    BYTE    type code (11h; all other codes reserved for TopWare)
  373.  06h  N BYTEs    received message
  374. --------N-21FF9F-----------------------------
  375. INT 21 - TopWare Network OS v5.10+ - ENABLE/DISABLE TopTerm SERVICE
  376.     AX = FF9Fh
  377.     CL = new state (00h disable [disregard TopTerm packets], 01h enable)
  378. Return: AL = status (00h successful, FFh failed)
  379. Note:    this function is only supported by Workstations, not the server
  380. --------N-21FFB0-----------------------------
  381. INT 21 - TopWare Network OS v5.10+ - GET SPOOLER PRINTING PRIORITY
  382.     AX = FFB0h
  383. Return: AL = priority status (see #1869)
  384. SeeAlso: AX=FFB1h
  385.  
  386. Bitfields for TopWare printer priority status:
  387. Bit(s)    Description    (Table 1869)
  388.  2    LPT3 has high priority
  389.  1    LPT2 has high priority
  390.  0    LPT1 has high priority
  391. --------N-21FFB1-----------------------------
  392. INT 21 - TopWare Network OS v5.10+ - SET SPOOLER PRINTING PRIORITY
  393.     AX = FFB1h
  394.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  395.     CH = new priority (00h normal, 01h high)
  396. Return: nothing
  397. SeeAlso: AX=FFB0h
  398. --------N-21FFB3-----------------------------
  399. INT 21 - TopWare Network OS v5.10+ - GET DEFAULT START-OF-JOB FORMFEED STATUS
  400.     AX = FFB3h
  401. Return: AL = starting formfeed status (see #1870)
  402. SeeAlso: AX=FFB4h,AX=FFC0h
  403.  
  404. Bitfields for TopWare printer start-of-job formfeed status:
  405. Bit(s)    Description    (Table 1870)
  406.  2    LPT3 has formfeed enabled
  407.  1    LPT2 has formfeed enabled
  408.  0    LPT1 has formfeed enabled
  409. --------N-21FFB4-----------------------------
  410. INT 21 - TopWare Network OS v5.10+ - SET DEFAULT START-OF-JOB FORMFEED STATUS
  411.     AX = FFB4h
  412.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  413.     CH = new formfeed status (00h off, 01h on)
  414. Return: nothing
  415. SeeAlso: AX=FFB3h,AX=FFC1h
  416. --------N-21FFBB-----------------------------
  417. INT 21 - TopWare Network OS v5.10+ - GET PRINTER SERVER STATION ADDRESS
  418.     AX = FFBBh
  419.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  420. Return: AL = current mapping printer server station number
  421.         00h if local
  422. SeeAlso: AX=FFBCh
  423. --------N-21FFBC-----------------------------
  424. INT 21 - TopWare Network OS v5.10+ - CANCEL TopShow FUNCTION
  425.     AX = FFBCh
  426.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  427.     CL = printer server station address or 00h for local printer
  428. Return: AL = status (00h successful, else failed)
  429. SeeAlso: AX=FFBBh
  430. --------N-21FFBD-----------------------------
  431. INT 21 - TopWare Network OS v5.10+ - GET CURRENT AUTOPRINT TIME
  432.     AX = FFBDh
  433.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  434. Return: AX = current AutoPrint timeout in clock ticks
  435. SeeAlso: AX=FFBEh
  436. --------N-21FFBE-----------------------------
  437. INT 21 - TopWare Network OS v5.10+ - SET AUTOPRINT TIME
  438.     AX = FFBEh
  439.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  440.     BX = timeout in clock ticks
  441. SeeAlso: AX=FFBDh
  442. --------N-21FFBF-----------------------------
  443. INT 21 - TopWare Network OS v5.10+ - GET LOGON USER INFORMATION
  444.     AX = FFBFh
  445.     DX:BX -> buffer for logon information (see #1871)
  446. Return: AL = status (00h successful, else failed)
  447.     AH = number of logged-in stations
  448.  
  449. Format of TopWare logon information:
  450. Offset    Size    Description    (Table 1871)
  451.  00h    BYTE    station address
  452.  01h 15 BYTEs    username
  453. --------N-21FFC0-----------------------------
  454. INT 21 - TopWare Network OS v5.10+ - GET DEFAULT END-OF-JOB FORMFEED STATUS
  455.     AX = FFC0h
  456. Return: AL = ending formfeed status (see #1872)
  457. SeeAlso: AX=FFB3h,AX=FFC1h
  458.  
  459. Bitfields for TopWare printer end-of-job formfeed status:
  460. Bit(s)    Description    (Table 1872)
  461.  2    LPT3 has formfeed enabled
  462.  1    LPT2 has formfeed enabled
  463.  0    LPT1 has formfeed enabled
  464. --------N-21FFC1-----------------------------
  465. INT 21 - TopWare Network OS v5.10+ - SET DEFAULT END-OF-JOB FORMFEED STATUS
  466.     AX = FFC1h
  467.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  468.     CH = new formfeed status (00h off, 01h on)
  469. Return: nothing
  470. SeeAlso: AX=FFB4h,AX=FFC0h
  471. --------N-21FFC2-----------------------------
  472. INT 21 - TopWare Network OS v5.10+ - GET DEFAULT COPIES OF SPOOLING FILE
  473.     AX = FFC2h
  474.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  475. Return: AL = default number of copies printed
  476. SeeAlso: AX=FFC7h
  477. --------N-21FFC3-----------------------------
  478. INT 21 - TopWare Network OS v5.10+ - GET SHARING STATUS OF PRINTER SERVER
  479.     AX = FFC3h
  480. Return: AL = sharing status of printers (see #1873)
  481.         FFh if not a printer server
  482.  
  483. Bitfields for TopWare printer sharing status:
  484. Bit(s)    Description    (Table 1873)
  485.  2    LPT3 is shared
  486.  1    LPT2 is shared
  487.  0    LPT1 is shared
  488. --------N-21FFC4-----------------------------
  489. INT 21 - TopWare Network OS v5.10+ - GET/SET LPT PORT ON PRINT SERVER
  490.     AX = FFC4h
  491.     BL = subfunction
  492.         00h get
  493.         Return: AL = mapped printer port on print server
  494.         01h set
  495.         CL = network printer port (00h LPT1, 01h LPT2, 02h LPT3)
  496.     CH = local printer (00h LPT1, 01h LPT2, 02h LPT3)
  497. --------N-21FFC6-----------------------------
  498. INT 21 - TopWare Network OS v5.10+ - SET DEFAULT PRINT FILE HEADER
  499.     AX = FFC6h
  500.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  501.     CL = header state (00h off, 01h on)
  502. SeeAlso: AX=FFC8h
  503. --------N-21FFC7-----------------------------
  504. INT 21 - TopWare Network OS v5.10+ - SET DEFAULT PRINT COPIES
  505.     AX = FFC7h
  506.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  507.     CL = new default number of copies to print
  508. SeeAlso: AX=FFC2h
  509. --------N-21FFC8-----------------------------
  510. INT 21 - TopWare Network OS v5.10+ - GET DEFAULT PRINT FILE HEADER STATUS
  511.     AX = FFC8h
  512. Return: AL = header status for printers (see #1874)
  513. SeeAlso: AX=FFC6h
  514.  
  515. Bitfields for TopWare print header status:
  516. Bit(s)    Description    (Table 1874)
  517.  2    LPT3 has headers enabled
  518.  1    LPT2 has headers enabled
  519.  0    LPT1 has headers enabled
  520. --------N-21FFC9-----------------------------
  521. INT 21 - TopWare Network OS v5.10+ - SET PRINTER SHARING
  522.     AX = FFC9h
  523.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  524.     CL = new sharing state (00h off, 01h on)
  525. Return: AL = status (00h successful, FFh not printer server)
  526. --------N-21FFCA-----------------------------
  527. INT 21 - TopWare Network OS v5.10+ - MOVE FILE FROM ONE PRINT SERVER TO ANOTHER
  528.     AX = FFCAh
  529.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  530.     CL = original printer server station address
  531.     BL = target printer server station address
  532.     DS:DX -> filename (12 bytes)
  533. Return: AL = status (00h successful, else failed)
  534. SeeAlso: AX=FFCBh
  535. --------N-21FFCB-----------------------------
  536. INT 21 - TopWare Network OS v5.10+ - DELETE FILE FROM SPOOLING QUEUE
  537.     AX = FFCBh
  538.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  539.     CL = printer server station address
  540.     DS:DX -> filename (12 bytes)
  541. Return: AL = status (00h successful, else failed)
  542. SeeAlso: AX=FFCAh
  543. --------N-21FFCC-----------------------------
  544. INT 21 - TopWare Network OS v5.10+ - GET PRINT SERVER'S SPOOLING QUEUE STATUS
  545.     AX = FFCCh
  546.     CL = printer server station address
  547.     BH = start item number of spooling file for print server
  548.     BL = number of the item to be retrieved
  549.     DS:DX -> buffer for queued file information (see #1875)
  550. Return: AL = status
  551.         00h successful
  552.         AH = number of spool files
  553.         DS:DX buffer filled
  554.         nonzero failed
  555.  
  556. Format of TopWare queued file information buffer [16-item array, one element]:
  557. Offset    Size    Description    (Table 1875)
  558.  00h 12 BYTEs    filename
  559.  0Ch    DWORD    size
  560.  10h    WORD    date
  561.  12h    WORD    time
  562.  14h 15 BYTEs    username
  563.  23h    BYTE    count
  564.  24h    BYTE    flag: header
  565.  25h    BYTE    print number
  566. --------N-21FFCD-----------------------------
  567. INT 21 - TopWare Network OS v5.10+ - GET STATUS OF ALL PRINT SERVERS
  568.     AX = FFCDh
  569.     DS:DX -> buffer for server status (see #1876)
  570. Return: AL = status
  571.         00h successful
  572.         AH = number of print servers
  573.         nonzero failed
  574.  
  575. Format of TopWare server status:
  576. Offset    Size    Description    (Table 1876)
  577.  00h    BYTE    station address
  578.  01h 15 BYTEs    username
  579.  10h    BYTE    flag: 01h printer is shared, 00h sharing disabled
  580.  11h    BYTE    number of files pending in queue
  581. --------N-21FFCF-----------------------------
  582. INT 21 - TopWare Network OS v5.10+ - CALL TopLook FUNCTION
  583.     AX = FFCFh
  584.     DH = page number (0-2, 2 is text mode)
  585.     DL = type
  586.         00h look at specific screen
  587.         01h AutoLook on
  588.         FFh AutoLook off
  589.     BH = station number wishing to look
  590.     BL = station number to be looked at
  591.     CH = monochrome flag (01h monochrome, 00h not monochrome)
  592.     CL = screen mode (see #1867)
  593. Return: AL = status (00h successful, nonzero failed)
  594. SeeAlso: AX=FF8Dh
  595. --------N-21FFD6-----------------------------
  596. INT 21 - TopWare Network OS v5.10+ - GET KEYCARD SERIAL NUMBER AND MAX USERS
  597.     AX = FFD6h
  598.     ES:BX -> 12-byte buffer for keycard serial number
  599. Return: CX = maximum number of users
  600.     ES:BX buffer filled
  601. --------N-21FFD7-----------------------------
  602. INT 21 - TopWare Network OS v5.10+ - GET NETWORK PROTECTION ATTRIBUTES STATUS
  603.     AX = FFD7h
  604. Return: AL = status (00h disabled, 01h enabled)
  605. --------N-21FFE3DL00-------------------------
  606. INT 21 - TopWare Network OS v5.10+ - INITIATE ACCESS TO SPECIFIC PACKET TYPE
  607.     AX = FFE3h
  608.     DL = 00h
  609.     BX = packet type for Ethernet header (IP = 0800h, ARP = 0806h, etc.)
  610.     ES:DI -> receive routine (see #1878)
  611. Return: CF clear if successful
  612.         AX = handle number
  613.     CF set on error
  614.         DH = error code (03h,05h,09h,0Ah,11h) (see #1877)
  615. SeeAlso: AX=FFE3h/DL=01h
  616.  
  617. (Table 1877)
  618. Values for TopWare error code:
  619.  01h    invalid handle
  620.  03h    no interfaces of the specified type found
  621.  05h    bad packet type
  622.  09h    insufficient space
  623.  0Ah    type already being accessed
  624.  0Ch    unable to send packet (usually hardware error)
  625.  11h    invalid function
  626.  
  627. (Table 1878)
  628. Values TopWare receive routine is called with:
  629.     AX = function
  630.         0000h request packet buffer
  631.         CX = packet size
  632.         Return: ES:DI -> buffer or 0000h:0000h to discard packet
  633.         0001h packet copied
  634.         CX = packet size
  635.         DS:SI -> copied packet (same as returned ES:DI above)
  636. --------N-21FFE3DL01-------------------------
  637. INT 21 - TopWare Network OS v5.10+ - END ACCESS TO SPECIFIC PACKET TYPE
  638.     AX = FFE3h
  639.     DL = 01h
  640.     BX = handle returned by AX=FFE3h/DL=00h
  641. Return: CF clear if successful
  642.     CF set on error
  643.         DH = error code (01h,11h) (see #1877)
  644. Note:    the specified access handle will no longer be valid after this call
  645. SeeAlso: AX=FFE3h/DL=00h
  646. --------N-21FFE3DL02-------------------------
  647. INT 21 - TopWare Network OS v5.10+ - SEND PACKET
  648.     AX = FFE3h
  649.     DL = 02h
  650.     CX = length of data buffer
  651.     DS:SI -> buffer containing data
  652. Return: CF clear if successful
  653.     CF set on error
  654.         DH = error code (0Ch,11h) (see #1877)
  655. --------N-21FFE3DL03-------------------------
  656. INT 21 - TopWare Network OS v5.10+ - GET LOCAL NETWORK INTERFACE ADDRESS
  657.     AX = FFE3h
  658.     DL = 03h
  659.     ES:DI -> 6-byte buffer for address
  660. SeeAlso: AX=FFE3h/DL=00h
  661. --------v-21FFFE-----------------------------
  662. INT 21 - VIRUS - "08/15"/"Many Fingers" - INSTALLATION CHECK
  663.     AX = FFFEh
  664. Return: AX = 0815h if resident
  665. SeeAlso: AX=FF10h,AX=FFFEh/BX=0000h
  666. --------v-21FFFEBX0000-----------------------
  667. INT 21 - VIRUS - "Anti-Thunderbyte/LEMMING" - INSTALLATION CHECK
  668.     AX = FFFEh
  669.     BX = 0000h
  670. Return: BX = FFFFh if resident
  671. SeeAlso: AX=FFFEh,AX=FFFFh
  672. --------v-21FFFF-----------------------------
  673. INT 21 - VIRUS - "Ontario", "Year 1992"/"B1M92" - INSTALLATION CHECK
  674.     AX = FFFFh
  675. Return: AX = 0000h if "Ontario" resident
  676.     AX = 1992h if "Year 1992"/"B1M92" resident
  677. SeeAlso: AX=FF0Fh,AX=FFFFh/CX=0000h,INT 6B"VIRUS"
  678. --------v-21FFFFCX0000-----------------------
  679. INT 21 - VIRUS - "Revenge" - INSTALLATION CHECK
  680.     AX = FFFFh
  681.     CX = 0000h
  682. Return: CX = 0006h if resident
  683. SeeAlso: AX=FFFFh,INT 6B"VIRUS"
  684. --------D-22---------------------------------
  685. INT 22 - DOS 1+ - PROGRAM TERMINATION ADDRESS
  686. Desc:    this vector specifies the address of the routine which is to be given
  687.       control after a program is terminated; it should never be called
  688.       directly, since it does not point at an interrupt handler
  689. Notes:    this vector is restored from the DWORD at offset 0Ah in the PSP during
  690.       termination, and then a FAR JMP is performed to the address in INT 22
  691.     normally points at the instruction immediately following INT 21/AH=4Bh
  692.       call which loaded the current program
  693. SeeAlso: INT 20,INT 21/AH=00h,INT 21/AH=31h,INT 21/AH=4Ch
  694. --------G-22---------------------------------
  695. INT 22 - COMTROL HOSTESS i/ISA DEBUGGER - CHANGE FIRMWARE DEBUGGING PORT
  696.     AL = new firmware debugging port
  697. Return: ???
  698. SeeAlso: INT 21"COMTROL",INT 23"COMTROL"
  699. --------D-23---------------------------------
  700. INT 23 - DOS 1+ - CONTROL-C/CONTROL-BREAK HANDLER
  701. ---DOS 1.x---
  702. Return: AH = 00h abort program
  703.     if all registers preserved, restart DOS call
  704. ---DOS 2+---
  705.     CF clear
  706. Return: all registers preserved
  707.     return via RETF with CF set or (MS-DOS 1,DR DOS) RETF 2 with CF set
  708.         DOS will abort program with errorlevel 0
  709.     else (RETF/RETF 2 with CF clear or IRET with CF ignored)
  710.         interrupted DOS call is restarted
  711. Notes:    this interrupt is invoked whenever DOS detects a ^C or ^Break; it
  712.       should never be called directly
  713.     MS-DOS 1.25 also invokes INT 23 on a divide overflow (INT 00)
  714.     MS-DOS remembers the stack pointer before calling INT 23, and if it is
  715.       not the same on return, pops and discards the top word; this is what
  716.       permits a return with RETF as well as IRET or RETF 2
  717.     MS-DOS 2.1+ ignores the returned CF if SP is the same on return as it
  718.       was when DOS called INT 23, so RETF 2 will not terminate the program
  719.     Novell DOS 7 always pops a word if CF is set on return, so one should
  720.       not return with RETF 2 and CF set or IRET with the stored flags' CF
  721.       set
  722.     any DOS call may safely be made within the INT 23 handler, although
  723.       the handler must check for a recursive invocation if it does
  724.       call DOS
  725. SeeAlso: INT 1B
  726. --------G-23---------------------------------
  727. INT 23 - COMTROL HOSTESS i/ISA DEBUGGER - GET CONFIGURATION INFORMATION
  728.     AL = query type
  729.         00h get old config map
  730.         Return: AX = old config map
  731.         01h get dual-ported RAM map
  732.         Return: BX:AX = dual-ported RAM map
  733.         02h get SCC port map
  734.         Return: BX:AX = SCC port map
  735. SeeAlso: INT 22"COMTROL",INT 26"COMTROL"
  736. --------D-24---------------------------------
  737. INT 24 C - DOS 1+ - CRITICAL ERROR HANDLER
  738. Notes:    invoked when a critical (usually hardware) error is encountered by DOS
  739.       (see #1879); should never be called directly
  740.     when DOS terminates a program, it copies the previous value of the
  741.       INT 24 vector out of the PSP (see #0725) and into the interrupt
  742.       vector table
  743. SeeAlso: INT 21/AH=95h
  744.  
  745. (Table 1879)
  746. Values critical error handler is called with:
  747.     AH = type and processing flags (see #1880)
  748.     AL = drive number if AH bit 7 clear
  749.     BP:SI -> device driver header (see #0987 at INT 21/AH=52h)
  750.         (BP:[SI+4] bit 15 set if character device)
  751.     DI low byte contains error code if AH bit 7 set (see #1881)
  752.     STACK:    DWORD    return address for INT 24 call
  753.         WORD    flags pushed by INT 24
  754.         WORD    original AX on entry to INT 21
  755.         WORD    BX
  756.         WORD    CX
  757.         WORD    DX
  758.         WORD    SI
  759.         WORD    DI
  760.         WORD    BP
  761.         WORD    DS
  762.         WORD    ES
  763.         DWORD    return address for INT 21 call
  764.         WORD    flags pushed by INT 21
  765. Return: AL = action code (see #1882)
  766.     SS,SP,DS,ES,BX,CX,DX preserved
  767. Notes:    the only DOS calls the handler may make are INT 21/AH=01h-0Ch,30h,59h
  768.     if the handler returns to the application by popping the stack, DOS
  769.       will be in an unstable state until the first call with AH > 0Ch
  770.     for DOS 3.1+, IGNORE (AL=00h) is turned into FAIL (AL=03h) on network
  771.       critical errors
  772.     if IGNORE specified but not allowed, it is turned into FAIL
  773.     if RETRY specified but not allowed, it is turned into FAIL
  774.     if FAIL specified but not allowed, it is turned into ABORT
  775.     (DOS 3.0+) if a critical error occurs inside the critical error
  776.       handler, the DOS call is automatically failed (AL set to 03h and
  777.       the INT 24 call skipped)
  778.  
  779. Bitfields for critical error type and processing flags:
  780. Bit(s)    Description    (Table 1880)
  781.  7    clear = disk I/O error
  782.     set   = -- if block device, bad FAT image in memory
  783.         -- if char device, error code in DI
  784.  6    unused
  785.  5    Ignore allowed (DOS 3.0+)
  786.  4    Retry allowed (DOS 3.0+)
  787.  3    Fail allowed (DOS 3.0+)
  788.  2-1    disk area of error
  789.     00 = DOS area    01 = FAT
  790.     10 = root dir    11 = data area
  791.  0    set if write, clear if read
  792.  
  793. (Table 1881)
  794. Values for critical error code:
  795.  00h    write-protection violation attempted
  796.  01h    unknown unit for driver
  797.  02h    drive not ready
  798.  03h    unknown command given to driver
  799.  04h    data error (bad CRC)
  800.  05h    bad device driver request structure length
  801.  06h    seek error
  802.  07h    unknown media type
  803.  08h    sector not found
  804.  09h    printer out of paper
  805.  0Ah    write fault
  806.  0Bh    read fault
  807.  0Ch    general failure
  808.  0Dh    (DOS 3.0+) sharing violation
  809.  0Eh    (DOS 3.0+) lock violation
  810.  0Fh    invalid disk change
  811.  10h    (DOS 3.0+) FCB unavailable
  812.  11h    (DOS 3.0+) sharing buffer overflow
  813.  12h    (DOS 4.0+) code page mismatch
  814.  13h    (DOS 4.0+) out of input
  815.  14h    (DOS 4.0+) insufficient disk space
  816.  
  817. (Table 1882)
  818. Values for critical error handler action code:
  819.  00h    ignore error and continue processing request
  820.  01h    retry operation
  821.  02h    terminate program as though INT 21/AH=4Ch called (INT 20h for DOS 1.x)
  822.  03h    fail system call in progress (DOS 3+)
  823. --------D-25---------------------------------
  824. INT 25 - DOS 1+ - ABSOLUTE DISK READ (except partitions > 32M)
  825.     AL = drive number (00h = A:, 01h = B:, etc)
  826.     CX = number of sectors to read (not FFFFh)
  827.     DX = starting logical sector number (0000h - highest sector on drive)
  828.     DS:BX -> buffer for data
  829. Return: CF clear if successful
  830.     CF set on error
  831.         AH = status (see #1883)
  832.         AL = error code (same as passed to INT 24 in DI)
  833.     may destroy all other registers except segment registers
  834. Notes:    original flags are left on stack, and must be popped by caller
  835.     this call bypasses the DOS filesystem
  836.     examination of CPWIN386.CPL indicates that if this call fails with
  837.       error 0408h on an old-style (<32M) call, one should retry the
  838.       call with the high bit of the drive number in AL set
  839.     Novell DOS 7 decides whether the old-style or new-style (>32M) version
  840.       of INT 25 must be used solely on the basis of the partition's size,
  841.       thus forcing use of the new-style call even for data in the first
  842.       32M of the partition
  843. BUGS:    DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
  844.       invalid drive number
  845.     DR DOS 3.41 will return with a jump instead of RETF, leaving the
  846.       wrong number of bytes on the stack; use the huge-partition version
  847.       (INT 25/CX=FFFFh) for all partition sizes under DR DOS 3.41
  848. SeeAlso: INT 13/AH=02h,INT 25/CX=FFFFh,INT 26,INT 21/AX=7305h
  849.  
  850. (Table 1883)
  851. Values for disk I/O status:
  852.  80h    device failed to respond (timeout)
  853.  40h    seek operation failed
  854.  20h    controller failed
  855.  10h    data error (bad CRC)
  856.  08h    DMA failure
  857.  04h    requested sector not found
  858.  03h    write-protected disk (INT 26 only)
  859.  02h    bad address mark
  860.  01h    bad command
  861. --------D-25----CXFFFF-----------------------
  862. INT 25 - DOS 3.31+ - ABSOLUTE DISK READ (>32M hard-disk partition)
  863.     CX = FFFFh
  864.     AL = drive number (0=A, 1=B, etc)
  865.     DS:BX -> disk read packet (see #1884)
  866. Return: CF clear if successful
  867.     CF set on error
  868.         AH = status (see #1883)
  869.         AL = error code (same as passed to INT 24 in DI)
  870.     may destroy all other registers except segment registers
  871. Notes:    partition is potentially >32M (and requires this form of the call) if
  872.       bit 1 of the device attribute word in the device driver is set
  873.     original flags are left on stack, and must be removed by caller
  874.     this call bypasses the DOS filesystem
  875. SeeAlso: INT 13/AH=02h,INT 25,INT 26/CX=FFFFh,INT 21/AX=7305h
  876.  
  877. Format of disk read packet:
  878. Offset    Size    Description    (Table 1884)
  879.  00h    DWORD    sector number
  880.  04h    WORD    number of sectors to read
  881.  06h    DWORD    transfer address
  882. --------k-25CDCD-----------------------------
  883. INT 25 - Stacker - GET DEVICE DRIVER ADDRESS
  884.     AX = CDCDh
  885.     DS:BX -> buffer for address (see #1885)
  886.     CX = 0001h
  887.     DX = 0000h
  888. Return: AX = CDCDh if Stacker installed
  889.         DS:BX buffer filled
  890. Note:    not supported by Stacker Anywhere; to obtain the Stacker device
  891.       driver address and to detect drives controlled by all versions
  892.       of Stacker, INT 21/AX=4404h"Stacker" or lookup via the CDS and DPB
  893.       should be preferred (see INT 21/AH=52h)
  894.     Stacker Anywhere does not link its built-in device driver into
  895.       the standard device driver chain, but it can be found via CDS/DPB
  896. SeeAlso: INT 21/AX=4404h"Stacker"
  897.  
  898. Format of Stacker v2+ driver address buffer:
  899. Offset    Size    Description    (Table 1885)
  900.  00h    WORD    signature CDCDh
  901.  02h    WORD    ??? 0001h
  902.  04h    DWORD    pointer to Stacker signature at device driver offset 1Ah
  903.           (see #1886)
  904.  
  905. Format of Stacker v2+ device driver:
  906. Offset    Size    Description    (Table 1886)
  907.  00h    DWORD    pointer to next driver, offset=FFFFh if last driver
  908.         FFFFh:FFFFh for Stacker Anywhere
  909.  04h    WORD    device attributes (see #0988,#0989)
  910.  06h    WORD    device strategy entry point
  911.  08h    WORD    device interrupt entry point
  912.  0Ah    BYTE    number of subunits (drives) supported by driver
  913.         0 for Stacker Anywhere
  914.  0Bh  7 BYTEs    signature "STAC-CD" for Stacker and Stacker Anywhere
  915.  12h  7 BYTEs    ???
  916.  19h    BYTE    always = 01h ?? (Stacker Anywhere points here)
  917.  1Ah    WORD    signature A55Ah (all other Stacker versions point here)
  918.  1Ch    WORD    Stacker version * 64h
  919.         0C8h = 200, 012Ch = 300, 0190h = 400 (also Stacker Anywhere)
  920.  1Eh    WORD    offset of volume-specific information offset table
  921.         (list of WORDs, one per drive, containing offsets to various
  922.           information)
  923.  20h 56 BYTEs    n/a
  924.  58h    BYTE    volume number, set after INT 21/AX=4404h, INT 21/AX=4408h
  925.         (use to index into volume-specific info offset table,
  926.         should be set to FFh before and tested for change after)
  927.  59h 19 BYTEs    n/a
  928.  6Ch  4 BYTEs    ASCII string "SWAP"
  929.  70h 26 BYTEs    drive mapping table (one byte for each drive A: through Z:)
  930.         (only used for drives swapped by SSWAP.COM; other drives
  931.         compressed by Stacker can be found with the standard device
  932.         driver header signature (see INT 21/AH=52h)
  933. ---Stacker 4, Stacker Anywhere---
  934.  8Ah 40    BYTEs    ???
  935.  B2h  4 BYTEs    ASCII string "SWP2"
  936.  B6h 26 BYTEs    drive table ???
  937.  D0h 150 BYTEs    ???
  938. 166h 60 BYTEs    LZSINFO structure (see #2087 at INT 2F/AX=4A12h)
  939. SeeAlso: #1887,#0987 at INT 21/AH=52h
  940.  
  941. Format of Stacker boot record:
  942. Offset    Size    Description    (Table 1887)
  943. 1F0h  8 BYTEs    Stacker signature (first byte is CDh)
  944. 1F8h    DWORD    pointer to start of Stacker device driver
  945. 1FCh    WORD    Stacker volume number
  946. 1FEh    WORD    ???
  947. SeeAlso: #1886
  948. --------c-25--FFSI4358-----------------------
  949. INT 25 - PC-CACHE.SYS - INSTALLATION CHECK
  950.     AL = FFh
  951.     SI = 4358h
  952. Return: SI = 6378h if installed
  953.         CX = segment of device driver PC-CACHE.SYS
  954.         DX = version (major in DH, minor in DL)
  955. Program: PC-CACHE.SYS is a small device driver used by PC-Cache v5.x to obtain
  956.       access to certain disk drivers for devices such as Bernoulli drives
  957. SeeAlso: INT 13/AH=A0h
  958. --------D-26---------------------------------
  959. INT 26 - DOS 1+ - ABSOLUTE DISK WRITE (except partitions > 32M)
  960.     AL = drive number (00h = A:, 01h = B:, etc)
  961.     CX = number of sectors to write (not FFFFh)
  962.     DX = starting logical sector number (0000h - highest sector on drive)
  963.     DS:BX -> data to write
  964. Return: CF clear if successful
  965.     CF set on error
  966.         AH = status (see #1883)
  967.         AL = error code (same as passed to INT 24 in DI)
  968.         AX = 0207h if more than 64K sectors on drive -- use new-style call
  969.     may destroy all other registers except segment registers
  970. Notes:    original flags are left on stack, and must be popped by caller
  971.     this call bypasses the DOS filesystem, though DOS 5+ invalidates any
  972.       disk buffers referencing sectors which are written with this call
  973.     examination of CPWIN386.CPL indicates that if this call fails with
  974.       error 0408h on an old-style (<32M) call, one should retry the
  975.       call with the high bit of the drive number in AL set
  976.     Novell DOS 7 decides whether the old-style or new-style (>32M) version
  977.       of INT 26 must be used solely on the basis of the partition's size,
  978.       thus forcing use of the new-style call even for data in the first
  979.       32M of the partition
  980. BUGS:    DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
  981.       invalid drive number
  982.     DR DOS 3.41 will return with a jump instead of RETF, leaving the
  983.       wrong number of bytes on the stack; use the huge-partition version
  984.       (INT 26/CX=FFFFh) for all partition sizes under DR DOS 3.41
  985. SeeAlso: INT 13/AH=03h,INT 25,INT 26/CX=FFFFh,INT 21/AX=7305h
  986. --------D-26----CXFFFF-----------------------
  987. INT 26 - DOS 3.31+ - ABSOLUTE DISK WRITE (>32M hard-disk partition)
  988.     CX = FFFFh
  989.     AL = drive number (0=A, 1=B, etc)
  990.     DS:BX -> disk write packet (see #1888)
  991. Return: CF clear if successful
  992.     CF set on error
  993.         AH = status (see #1883)
  994.         AL = error code (same as passed to INT 24 in DI)
  995.         AX = 0207h if more than 64K sectors on drive -- use new-style call
  996.     may destroy all other registers except segment registers
  997. Notes:    partition is potentially >32M (and requires this form of the call) if
  998.       bit 1 of the device attribute word in the device driver is set
  999.     original flags are left on stack, and must be removed by caller
  1000.     this call bypasses the DOS filesystem, though DOS 5+ invalidates any
  1001.       disk buffers referencing sectors which are written with this call
  1002. SeeAlso: INT 13/AH=03h,INT 25/CX=FFFFh,INT 26,INT 21/AX=7305h
  1003.  
  1004. Format of disk write packet:
  1005. Offset    Size    Description    (Table 1888)
  1006.  00h    DWORD    sector number
  1007.  04h    WORD    number of sectors to read
  1008.  06h    DWORD    transfer address
  1009. --------G-26---------------------------------
  1010. INT 26 - COMTROL HOSTESS i/ISA DEBUGGER - ENTER/EXIT EXTENDED ADDRESSING MODE
  1011.     ???
  1012. Return: ???
  1013. SeeAlso: INT 23"COMTROL",INT 27"COMTROL"
  1014. --------D-27---------------------------------
  1015. INT 27 - DOS 1+ - TERMINATE AND STAY RESIDENT
  1016.     DX = number of bytes to keep resident (max FFF0h)
  1017.     CS = segment of PSP
  1018. Return: never
  1019. Notes:    this is an obsolete call
  1020.     INT 22, INT 23, and INT 24 are restored from the PSP
  1021.     does not close any open files
  1022.     the minimum number of bytes which will remain resident is 110h for
  1023.       DOS 2.x and 60h for DOS 3.0+; there is no minimum for DOS 1.x, which
  1024.       implements this service in COMMAND.COM rather than the DOS kernel
  1025. SeeAlso: INT 21/AH=31h
  1026. --------G-27---------------------------------
  1027. INT 27 - COMTROL HOSTESS i/ISA DEBUGGER - INVOKE REMOTE TURBO DEBUGGER KERNEL
  1028.     ???
  1029. Return: ???
  1030. Desc:    invoke a copy of the remote Turbo Debugger kernel on the Hostess i
  1031.       controller
  1032. SeeAlso: INT 20"COMTROL",INT 26"COMTROL"
  1033. --------D-28---------------------------------
  1034. INT 28 C - DOS 2+ - DOS IDLE INTERRUPT
  1035.     SS:SP = top of MS-DOS stack for I/O functions
  1036. Return: all registers preserved
  1037. Desc:    This interrupt is invoked each time one of the DOS character input
  1038.       functions loops while waiting for input.  Since a DOS call is in
  1039.       progress even though DOS is actually idle during such input waits,
  1040.       hooking this function is necessary to allow a TSR to perform DOS
  1041.       calls while the foreground program is waiting for user input.     The
  1042.       INT 28h handler may invoke any INT 21h function except functions
  1043.       00h through 0Ch.
  1044. Notes:    under DOS 2.x, the critical error flag (the byte immediately after the
  1045.       InDOS flag) must be set in order to call DOS functions 50h/51h from
  1046.       the INT 28h handler without destroying the DOS stacks.
  1047.     calls to INT 21/AH=3Fh,40h from within an INT 28 handler may not use a
  1048.       handle which refers to CON
  1049.     at the time of the call, the InDOS flag (see INT 21/AH=34h) is normally
  1050.       set to 01h; if larger, DOS is truly busy and should not be reentered
  1051.     the default handler is an IRET instruction
  1052.     supported in OS/2 compatibility box
  1053.     the _MS-DOS_Programmer's_Reference_ for DOS 5.0 incorrectly documents
  1054.       this interrupt as superseded
  1055. SeeAlso: INT 21/AH=34h,INT 2A/AH=84h,INT 2F/AX=1680h
  1056. --------D-29---------------------------------
  1057. INT 29 C - DOS 2+ - FAST CONSOLE OUTPUT
  1058.     AL = character to display
  1059. Return: nothing
  1060.     BX may be destroyed by some versions of DOS 3.3
  1061. Notes:    automatically called when writing to a device with bit 4 of its device
  1062.       driver header set (see also INT 21/AH=52h)
  1063.     COMMAND.COM v3.2 and v3.3 compare the INT 29 vector against the INT 20
  1064.       vector and assume that ANSI.SYS is installed if the segment is larger
  1065.     the default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh
  1066.     the default handler under DESQview 2.2 understands the <Esc>[2J
  1067.       screen-clearing sequence, calls INT 10/AH=0Eh for all others
  1068. SeeAlso: INT 21/AH=52h,INT 2F/AX=0802h,INT 79
  1069. --------U-29E60DCL0E-------------------------
  1070. INT 29 - ShowGFX - INSTALLATION CHECK
  1071.     AX = E60Dh
  1072.     CL = 0Eh
  1073.     DX = C0DEh
  1074. Return: DX = DEC0h
  1075. Program: ShowGFX is a PCBoard graphics driver by Solar Designer
  1076. --------N-2A00-------------------------------
  1077. INT 2A - NETWORK - INSTALLATION CHECK
  1078.     AH = 00h
  1079. Return: AH <> 00h if installed
  1080.     CF set if NetWare v2.15 NetBIOS emulator installed
  1081. Note:    supported by PC LAN Program, LAN Manager, LANtastic, NetWare, 10NET,
  1082.       etc.
  1083. SeeAlso: INT 5C"NetBIOS"
  1084. --------N-2A0000-----------------------------
  1085. INT 2A - AT&T Starlan Extended NetBIOS (var length names) - INSTALLATION CHECK
  1086.     AX = 0000h
  1087. Return: AH = DDh
  1088. SeeAlso: INT 5B"Extended NetBIOS"
  1089. --------N-2A01-------------------------------
  1090. INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NETBIOS REQUEST,NO ERROR RETRY
  1091.     AH = 01h
  1092.     ES:BX -> NCB (see #2500 at INT 5C"NetBIOS")
  1093. Return: AL = NetBIOS error code
  1094.     AH = status
  1095.         00h no error
  1096.         01h error occurred
  1097. SeeAlso: AH=04h,AX=0500h,INT 5B"Extended NetBIOS",INT 5C"NetBIOS"
  1098. --------N-2A02-------------------------------
  1099. INT 2A - NETWORK (Microsoft) - SET NET PRINTER MODE
  1100.     AH = 02h
  1101.     ???
  1102. Return: ???
  1103. --------N-2A0300-----------------------------
  1104. INT 2A - NETWORK - CHECK DIRECT I/O
  1105.     AX = 0300h
  1106.     DS:SI -> ASCIZ device name (may be full path or only drive specifier--
  1107.           must include the colon)
  1108. Return: CF clear if direct physical addressing (INT 13,INT 25) permissible
  1109.     CF set if access via files only
  1110. Notes:    do not use direct disk accesses if this function returns CF set or the
  1111.       device is redirected (INT 21/AX=5F02h)
  1112.     use AH=00h to determine whether the network is installed; if not,
  1113.       direct physical access is allowed
  1114.     may take some time to execute, so programs which need to check
  1115.       frequently should save the result of the first call
  1116.     this function is called by the DOS kernel on INT 25 and INT 26
  1117.     supported by PC LAN Program, LAN Manage, LANtastic, NetWare, 10NET,
  1118.       etc.
  1119. SeeAlso: INT 13/AH=02h,INT 13/AH=03h,INT 25,INT 26,INT 21/AX=5F02h
  1120. --------N-2A04-------------------------------
  1121. INT 2A - NETWORK - EXECUTE NetBIOS REQUEST
  1122.     AH = 04h
  1123.     AL = error retry
  1124.         00h automatically retry request on errors 09h, 12h, and 21h
  1125.           (see #2499 at INT 5C"NetBIOS")
  1126.         01h no retry
  1127.         02h ???
  1128.     ES:BX -> Network Control Block (see #2500 at INT 5C"NetBIOS")
  1129. Return: AX = 0000h if successful
  1130.     AH = 01h on error
  1131.         AL = error code
  1132. Notes:    invokes either INT 5B or INT 5C as appropriate
  1133.     supported by PC LAN Program, LANtastic, LAN Manager, NetWare, 10NET,
  1134.       etc.
  1135.     NetWare 2.15 NetBIOS emulator returns CF clear if successful, CF set
  1136.       on error
  1137.     PC LAN Program defines any non-zero return value in AH as an error
  1138.       indicator for subfunction 00h, and any non-zero return value in AX
  1139.       as an error indicator for subfunction 01h
  1140. SeeAlso: AH=00h,AH=01h,AX=0500h,INT 5B"Extended NetBIOS",INT 5C"NetBIOS"
  1141. --------N-2A0500-----------------------------
  1142. INT 2A - NETWORK - GET NETWORK RESOURCE AVAILABILITY
  1143.     AX = 0500h
  1144. Return: AX reserved
  1145.     BX = number of network names available
  1146.     CX = number of network control blocks available
  1147.     DX = number of network sessions available
  1148. Notes:    supported by PC LAN Program, LAN Manager, LANtastic, NetWare, 10NET,
  1149.       etc.
  1150.     the application should call this function before using any network
  1151.       resources, and maintain its own count to avoid exceeding the
  1152.       network's resource limits
  1153. SeeAlso: AH=00h,AH=01h,AH=04h,INT 5C"NetBIOS"
  1154. --------N-2A06-------------------------------
  1155. INT 2A - NETBIOS, LANtastic - NETWORK PRINT-STREAM CONTROL
  1156.     AH = 06h
  1157.     AL = function
  1158.         01h set concatenation mode
  1159.         all printer output put in one job until return to DOS prompt
  1160.         02h set truncation mode (default)
  1161.         printer open/close or BIOS/DOS output switch starts new job
  1162.         03h flush printer output and start new print job
  1163. Return: CF set on error
  1164.         AX = error code
  1165.     CF clear if successful
  1166. Notes:    subfunction 03h is equivalent to Ctrl/Alt/keypad-*
  1167.     supported by PC LAN Program, LANtastic, NetWare, 10NET, etc.
  1168.     LANtastic v4.x no longer supports this call
  1169.     this function sets the printer mode for all redirected printers
  1170. SeeAlso: INT 21/AX=5D08h,INT 21/AX=5D09h,INT 2F/AX=1125h
  1171. --------N-2A07-------------------------------
  1172. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  1173.     AH = 07h
  1174.     ???
  1175. Return: ???
  1176. Program: PC Network is an early networking package which was renamed the
  1177.       IBM PC Local Area Network Program (PC LAN Program) as of v1.10
  1178. SeeAlso: AH=86h
  1179. --------N-2A2001-----------------------------
  1180. INT 2A - MS Networks or NETBIOS - ???
  1181.     AX = 2001h
  1182.     ???
  1183. Return: ???
  1184. Note:    intercepted by DESQview 2.x
  1185. --------N-2A2002-----------------------------
  1186. INT 2A - NETWORK - ???
  1187.     AX = 2002h
  1188.     ???
  1189. Return: ???
  1190. Note:    called by MS-DOS 3.30-6.00 APPEND
  1191. --------N-2A2003-----------------------------
  1192. INT 2A - NETWORK - ???
  1193.     AX = 2003h
  1194.     ???
  1195. Return: ???
  1196. Note:    called by MS-DOS 3.30-6.00 APPEND
  1197. --------N-2A4147DX0000-----------------------
  1198. INT 2A U - NetSoft DOS-NET v1.20+ - INSTALLATION CHECK
  1199.     AX = 4147h ('AG')
  1200.     DX = 0000h
  1201. Return: DX = 4147h if installed
  1202.         DS:SI -> configuration data (see #1889)
  1203. Program: DOS-NET is a shareware networking package by Albert Graham
  1204. Note:    this call is supported by CLIENT.COM, SERVER.COM, ROUTER.COM, and
  1205.       NETDOS.COM
  1206. SeeAlso: INT 65/DX=4147h,INT 65/DX=4741h
  1207.  
  1208. Format of DOS-NET v1.20 configuration data area:
  1209. Offset    Size    Description    (Table 1889)
  1210.  00h    BYTE    ???
  1211.  01h    BYTE    interrupt number used by DOS-NET APIs
  1212.  02h    WORD    function number to place in AX for above interrupt
  1213.  04h    BYTE    minor version as two BCD digits (e.g. 20h for v1.20)
  1214.  05h    BYTE    major version number (01h for v1.20)
  1215.  06h  2 BYTEs    ???
  1216.  08h    WORD    ??? (used by ARCNET.COM)
  1217.         bit 15: ??? (set by MACTEST.COM)
  1218.  0Ah    WORD    ??? (used by NDIS.COM and ODI.COM)
  1219.  0Ch 22 BYTEs    ???
  1220.  24h    DWORD    -> ??? function (set by PROTECT.COM)
  1221.  28h 12 BYTEs    ???
  1222.  34h    DWORD    -> ??? function (set by FASTVIEW.COM)
  1223.  38h    DWORD    -> ??? function (set by FASTVIEW.COM)
  1224.  58h    DWORD    -> ??? (offsets 04h and 1Ah from value are used by NETFILES)
  1225.     ???
  1226.  7Ch    WORD    ???
  1227.  7Eh    WORD    ??? (may be high half of a DWORD at 7Ch)
  1228.     ???
  1229.  A8h    DWORD    -> ??? (used by SM.COM)
  1230.     ???
  1231. 114h    WORD    ???
  1232. 116h    WORD    ??? (may be high half of a DWORD at 114h)
  1233.     ???
  1234. 1BDh    BYTE    ??? flags
  1235.         bit 0: ???
  1236.         bit 6: ???
  1237.     ???
  1238. 1E1h    BYTE    ???
  1239.     ???
  1240. 208h    WORD    ??? (used by SM.COM, MACTEST)
  1241. 282h    WORD    ???
  1242. 284h  2 BYTEs    ???
  1243. 286h    WORD    ??? flags
  1244.         bit 0: ???
  1245.     ???
  1246. 31Eh    WORD    ???
  1247. 320h    WORD    ??? (used by NDIS.COM and ODI.COM)
  1248. 322h  8 BYTEs    ???
  1249. 32Ah    WORD    ??? (used by NDIS.COM and ODI.COM)
  1250.     ???
  1251. 33Eh  4 BYTEs    ??? (used by ODI.COM)
  1252. 342h  N BYTEs    ??? (used by NDIS.COM)
  1253.     ???
  1254. 3CFh    BYTE    ??? flags
  1255.         bit 2: ???
  1256. 3D2h    BYTE    installed-component flags
  1257.         bit 0: PROTECT installed
  1258.         bit 1: NETCACHE installed
  1259.         bit 3: SM.COM installed
  1260.         bit 7: NETDEBUG installed
  1261. 3D3h    BYTE    installed-component flags
  1262.         bit 0: NETFILES installed
  1263.         bit 6: FASTVIEW installed
  1264.     ???
  1265. 3FFh    BYTE    ??? (used by NDIS.COM)
  1266. 400h    BYTE    ???
  1267. 401h    BYTE    ??? (used by SM.COM)
  1268. 402h    BYTE    ??? (used by SM.COM)
  1269.     ???
  1270. 448h    BYTE    ???
  1271. 449h    BYTE    ??? (used by MACTEST)
  1272. 44Ah    BYTE    ??? (used by PROTECT)
  1273. 44Bh    BYTE    ???
  1274. 44Ch    BYTE    ???
  1275. 44Dh    BYTE    ??? (used by SM.COM)
  1276. 44Eh    BYTE    ??? (used by SM.COM, MACTEST)
  1277.     ???
  1278. --------N-2A7802-----------------------------
  1279. INT 2A - NETWORK - PC LAN PROG v1.31+ - GET LOGGED ON USER NAME
  1280.     AX = 7802h
  1281.     ES:DI -> 8-byte buffer to be filled
  1282. Return: AL = 00h if no user logged on to Extended Services
  1283.     AL <> 00h if user logged on to Extended Services
  1284.         buffer at ES:DI filled with name, padded to 8 chars with blanks.
  1285. --------D-2A80-------------------------------
  1286. INT 2A CU - NETWORK - BEGIN DOS CRITICAL SECTION
  1287.     AH = 80h
  1288.     AL = critical section number (00h-0Fh) (see #1890)
  1289. Notes:    normally hooked to avoid interrupting a critical section, rather than
  1290.       called
  1291.     the handler should ensure that none of the critical sections are
  1292.       reentered, usually by suspending a task which attempts to reenter
  1293.       an active critical section
  1294.     the DOS kernel does not invoke critical sections 01h and 02h unless it
  1295.       is patched.  DOS 3.1+ contains a zero-terminated list of words
  1296.       beginning at offset -11 from the Swappable Data Area
  1297.       (see #1027 at INT 21/AX=5D06h); each word contains the offset within
  1298.       the DOS data segment of a byte which must be changed from C3h (RET)
  1299.       to 50h (POP AX) under DOS 3.x or from 00h to a nonzero value under
  1300.       DOS 4.0+ to enable use of critical sections.    For DOS 4.0+, all
  1301.       words in this list point at the byte at offset 0D0Ch.
  1302.     MS Windows patches the DOS kernel's calls to INT 2A/AH=80h-81h into
  1303.       far calls to its own handler, and does not reflect the calls back
  1304.       to INT 2A unless SYSTEM.INI contains ReflectDOSInt2A=1 or
  1305.       ModifyDOSInt2A=0 in the [386Enh] section
  1306.     Novell NETX does not issue INT 2A/AH=80h and INT 2A/AH=81h calls when
  1307.       it intercepts INT 21 calls and processes them itself
  1308. SeeAlso: AH=81h,AH=82h,AX=8700h,INT 21/AX=5D06h,INT 21/AX=5D0Bh
  1309.  
  1310. (Table 1890)
  1311. Values for DOS critical section number:
  1312.  01h    DOS kernel, SHARE.EXE, DOSMGR
  1313.     apparently for maintaining the integrity of DOS/SHARE/NET
  1314.       data structures
  1315.  02h    DOS kernel, DOSMGR
  1316.     ensures that no multitasking occurs while DOS is calling an
  1317.       installable device driver
  1318.  05h    network redirector
  1319.  06h    DOS 4.x only IFSFUNC
  1320.  08h    ASSIGN.COM
  1321.  0Ah    MSCDEX, CORELCDX
  1322.  0Fh    IBM PC LAN server (while intercepting INT 10/AH=06h,07h,0Eh)
  1323. --------D-2A81-------------------------------
  1324. INT 2A CU - NETWORK - END DOS CRITICAL SECTION
  1325.     AH = 81h
  1326.     AL = critical section number (00h-0Fh) (see #1890)
  1327. Notes:    normally hooked rather than called
  1328.     the handler should reawaken any tasks which were suspended due to an
  1329.       attempt to enter the specified critical section
  1330.     MS Windows patches the DOS kernel's calls to INT 2A/AH=80h-81h into
  1331.       far calls to its own handler, and does not reflect the calls back
  1332.       to INT 2A unless SYSTEM.INI contains ReflectDOSInt2A=1 or
  1333.       ModifyDOSInt2A=0 in the [386Enh] section
  1334. SeeAlso: AH=80h,AH=82h,AX=8700h
  1335. --------D-2A82-------------------------------
  1336. INT 2A CU - NETWORK - END DOS CRITICAL SECTIONS 0 THROUGH 7
  1337.     AH = 82h
  1338. Notes:    called by the INT 21h function dispatcher for function 0 and functions
  1339.       greater than 0Ch except 59h, and on process termination
  1340.     the handler should reawaken any tasks which were suspended due to an
  1341.       attempt to enter one of the critical sections 0 through 7
  1342. SeeAlso: AH=81h
  1343. --------N-2A84-------------------------------
  1344. INT 2A CU - NETWORK - KEYBOARD BUSY LOOP
  1345.     AH = 84h
  1346. Note:    similar to DOS's INT 28h, called from inside the DOS keyboard input
  1347.       loop (i.e. INT 21/AH=07h or INT 21/AH=08h) to allow the network
  1348.       software to process requests
  1349. SeeAlso: INT 28
  1350. --------N-2A86-------------------------------
  1351. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  1352.     AH = 86h
  1353.     ???
  1354. Return: ???
  1355. SeeAlso: AH=07h,AH=C4h
  1356. --------P-2A8700-----------------------------
  1357. INT 2A CU - PRINT - BEGIN BACKGROUND PRINTING
  1358.     AX = 8700h
  1359.     CF clear
  1360. Return: CF clear if OK to print in background now
  1361.     CF set if background printing not allowed at this time
  1362. Desc:    used to inform interested programs that PRINT is about to start its
  1363.       background processing, and allow those programs to postpone the
  1364.       processing if necessary
  1365. Notes:    when PRINT gains control and wants to begin printing, it calls this
  1366.       function.  If CF is clear on return, PRINT begins its background
  1367.       processing, and calls AX=8701h when it is done.  If CF is set on
  1368.       return, PRINT will relinquish control immediately, and will not
  1369.       call AX=8701h
  1370.     PCVENUS (an early network shell by IBM and CMU) hooks this call to
  1371.       prevent background printing while its own code is active
  1372. SeeAlso: AH=80h,AH=81h,AX=8701h
  1373. --------P-2A8701-----------------------------
  1374. INT 2A CU - PRINT - END BACKGROUND PRINTING
  1375.     AX = 8701h
  1376. Desc:    used to inform interested programs that PRINT has completed its
  1377.       background processing
  1378. Note:    called by PRINT after it has performed some background printing; not
  1379.       called if AX=8700h returned with CF set.
  1380. SeeAlso: AX=8700h
  1381. --------N-2A89-------------------------------
  1382. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  1383.     AH = 89h
  1384.     AL = ???  (ASSIGN uses 08h)
  1385.     ???
  1386. Return: ???
  1387. --------I-2A90-------------------------------
  1388. INT 2A U - IBM PC 3270 EMULATION PROGRAM - ???
  1389.     AH = 90h
  1390.     ???
  1391. Return: ???
  1392. Note:    the LANtastic redirector and SERVER.EXE use this function with AL=01h,
  1393.       03h-07h,0Ch-11h
  1394. --------N-2AC2-------------------------------
  1395. INT 2A U - Network - ???
  1396.     AH = C2h
  1397.     AL = subfunction
  1398.         07h ???
  1399.         08h ???
  1400.     BX = 0001h
  1401.     ???
  1402. Return: ???
  1403. Note:    this function is called by the DOS 3.30-6.00 APPEND
  1404. --------N-2AC4-------------------------------
  1405. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  1406.     AH = C4h
  1407.     AL = subfunction
  1408.         07h ???
  1409.         08h ???
  1410.     BX = ???
  1411.     ???
  1412. Return: ???
  1413. SeeAlso: AH=86h
  1414. --------N-2AD800-----------------------------
  1415. INT 2A U - Novell NetWare Lite - SERVER - SET ???
  1416.     AX = D800h
  1417. Return: nothing
  1418. Desc:    sets ??? flag, and sets ??? to initial value
  1419. Note:    called by CLIENT
  1420. SeeAlso: AX=D801h,AX=D850h
  1421. --------N-2AD801-----------------------------
  1422. INT 2A U - Novell NetWare Lite - SERVER - RESET ???
  1423.     AX = D801h
  1424. Return: nothing
  1425. Desc:    clears the ??? flag set by AX=D800h
  1426. Note:    called by CLIENT
  1427. SeeAlso: AX=D800h,AX=D850h
  1428. --------N-2AD850-----------------------------
  1429. INT 2A U - Novell NetWare Lite - CLIENT - INCREMENT ???
  1430.     AX = D850h
  1431. Return: nothing
  1432. Desc:    increments an internal byte-sized counter
  1433. Note:    this function is intercepted by DV/X 1.10 PEERSERV.DVR and the
  1434.       Advanced NetWare 4.0 DOS Requester
  1435. SeeAlso: AX=D851h
  1436. --------N-2AD851-----------------------------
  1437. INT 2A U - Novell NetWare Lite - CLIENT - RESET ???
  1438.     AX = D851h
  1439. Return: nothing
  1440. Desc:    resets an internal byte-sized counter to zero
  1441. Note:    this function is intercepted by DV/X 1.10 PEERSERV.DVR and the
  1442.       Advanced NetWare 4.0 DOS Requester
  1443. SeeAlso: AX=D850h
  1444. --------N-2AD852-----------------------------
  1445. INT 2A U - Novell NetWare - DOS Requester v1.03 - ???
  1446.     AX = D852h
  1447. Return: ???
  1448. Note:    calls the NetWare Lite SERVER installation check, and sets ??? pointer
  1449. SeeAlso: AX=D853h,INT 2F/AX=D880h
  1450. --------N-2AD853-----------------------------
  1451. INT 2A U - Novell NetWare - DOS Requester v1.03 - ???
  1452.     AX = D853h
  1453. Return: ???
  1454. Note:    clears the pointer set by AX=D852h
  1455. SeeAlso: AX=D852h
  1456. --------N-2AE0-------------------------------
  1457. INT 2A U - PC Network 1.00 - ???
  1458.     AH = E0h
  1459.     AL = subfunction??? (01h,02h, maybe others)
  1460.     ???
  1461. Return: ???
  1462. Note:    called by PCNet 1.00 NET.COM, a shell program from which others are run
  1463. --------N-2AFF90-----------------------------
  1464. INT 2A - PC/TCP PREDIR.EXE - ???
  1465.     AX = FF90h
  1466. Return: AX = ???
  1467. Note:    PREDIR.EXE is the network printer redirector included as part of the
  1468.       PC/TCP system by FTP Software, Inc.
  1469. --------N-2AFF91-----------------------------
  1470. INT 2A - PC/TCP PREDIR.EXE - ???
  1471.     AX = FF91h
  1472.     BX = ???
  1473. Return: AX = status???
  1474. --------N-2AFF92-----------------------------
  1475. INT 2A - PC/TCP PREDIR.EXE - INSTALLATION CHECK
  1476.     AX = FF92h
  1477. Return: AX = 0000h if installed
  1478.        BX = redirected printer port (FFFFh if no printers redirected)
  1479.        CX = version (CH = major, CL = minor)
  1480. Note:    PREDIR.EXE is the network printer redirector included as part of the
  1481.       PC/TCP system by FTP Software, Inc.
  1482. --------N-2AFF93-----------------------------
  1483. INT 2A - PC/TCP PREDIR.EXE - ???
  1484.     AX = FF93h
  1485. Return: AX = ???
  1486. --------N-2AFF94-----------------------------
  1487. INT 2A - PC/TCP PREDIR.EXE - ???
  1488.     AX = FF94h
  1489.     BX = ???
  1490.     CX = ???
  1491.     DX = ???
  1492. Return: AX = ???
  1493. Note:    PREDIR.EXE is the network printer redirector included as part of the
  1494.       PC/TCP system by FTP Software, Inc.
  1495. --------N-2AFF95-----------------------------
  1496. INT 2A - PC/TCP PREDIR.EXE - GET CONFIGURATION STRINGS
  1497.     AX = FF95h
  1498.     CX = what to get
  1499.         0000h ??? (returned pointer to "C:\COMMAND.COM")
  1500.         0001h spooling program
  1501.         0002h ???
  1502.         0003h spool file name
  1503.         0004h swap file name
  1504. Return: AX = status
  1505.         0000h successful
  1506.     BX:DX -> ASCIZ configuration string
  1507. --------N-2AFF96-----------------------------
  1508. INT 2A - PC/TCP PREDIR.EXE - SET PRINT JOB TERMINATION CONFIGURATION
  1509.     AX = FF96h
  1510.     CX = what to set
  1511.         0000h ???
  1512.         0001h print-on-hotkey state
  1513.         0002h print-on-exit state
  1514.         0003h print job timeout in clock ticks
  1515.         0004h print-on-EOF state
  1516.     BX = new value (0000h disabled, 0001h enabled except for timeout)
  1517. Return: AX = ???
  1518. SeeAlso: AX=FF97h
  1519. Note:    PREDIR.EXE is the network printer redirector included as part of the
  1520.       PC/TCP system by FTP Software, Inc.
  1521. --------N-2AFF97-----------------------------
  1522. INT 2A - PC/TCP PREDIR.EXE - GET PRINT JOB TERMINATION CONFIGURATION
  1523.     AX = FF97h
  1524.     CX = what to get
  1525.         0000h ???
  1526.         0001h print-on-hotkey state
  1527.         0002h print-on-exit state
  1528.         0003h print job timeout in clock ticks
  1529.         0004h print-on-EOF state
  1530. Return: AX = status
  1531.         0000h successful
  1532.     BX = old value (0000h disabled, 0001 enabled except for timeout)
  1533. SeeAlso: AX=FF96h
  1534. --------D-2B---------------------------------
  1535. INT 2B - DOS 2+ - RESERVED
  1536. Note:    this vector is not used in MS-DOS versions <= 6.22, and points at an
  1537.       IRET instruction
  1538. --------D-2B---------------------------------
  1539. INT 2B - IBM ROM-DOS v4.0 - ???
  1540.     AH = function
  1541.         00h ??? (modifies data in IBMBIO.COM)
  1542.         01h internal operations
  1543.         02h ???
  1544.         AL = index (00h-0Ch)
  1545.         Return: AX = ??? or (CMOS 2Dh and CMOS 2Eh)
  1546.         03h get ??? data
  1547.         Return: AX = (CMOS 2Dh and CMOS 2Eh)
  1548.             BX = FFFFh
  1549.         other does nothing
  1550. Note:    function 03h is called by ROMSHELL.COM; if BX != 0, then the ES:DI from
  1551.       INT 2F/AX=1982h points at valid data
  1552. SeeAlso: INT 2F/AX=1982h
  1553. --------D-2C---------------------------------
  1554. INT 2C - DOS 2+ - RESERVED
  1555. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  1556. --------O-2C---------------------------------
  1557. INT 2C - STARLITE architecture - KERNEL API
  1558. Note:    STARLITE is an architecture by General Software for a series of MS-DOS
  1559.       compatible operating systems (OEM DOS, NETWORK DOS, and SMP DOS) to
  1560.       be released in 1991.    The interrupt number is subject to change
  1561.       before the actual release.
  1562. --------m-2C---------------------------------
  1563. INT 2C R - Cloaking - CALL PROTECTED-MODE PASSALONG CHAIN
  1564. Notes:    when this interrupt is invoked in V86 mode, RM386 will invoke the first
  1565.       in a chain of protected-mode handlers, and will only pass execution
  1566.       to the V86-mode INT 2C handler if none of the handlers in the
  1567.       passalong chain handle the call instead.  This is the method by which
  1568.       the real-mode stub of a cloaked application communicates with the
  1569.       protected-mode portion.
  1570.     the cloaking host calls the passalong chain with EAX=58494E33h ('WIN3')
  1571.       when MS Windows starts up and with EAX=334E4958h ('3NIW') when
  1572.       Windows shuts down; between these two broadcasts, the additional
  1573.       Windows-only Cloaking services are available
  1574.     this function was first introduced with RM386 (RAM-MAN/386) v6.00, the
  1575.       memory manager included in Helix Software's Netroom
  1576. SeeAlso: INT 2C/AX=0009h,INT 2F/AX=4310h"Cloaking"
  1577. --------m-2C0000-----------------------------
  1578. INT 2C P - Cloaking - ALLOCATE GDT SELECTOR
  1579.     AX = 0000h
  1580.     EBX = base address
  1581.     CL = access mode byte
  1582.     CH = extended access mode byte (omit limit field)
  1583.     EDX = segment limit
  1584. Return: CF clear if successful
  1585.         AX = selector
  1586.     CF set on error
  1587.         AX = error code (see #1891)
  1588. Notes:    this INT 2C interface is used by Netroom's DPMI.EXE v3.00
  1589.     to access extended memory, set the base address to the desired
  1590.       physical address plus 400000h (4M)
  1591.     this function was first introduced with RM386 (RAM-MAN/386) v6.00, the
  1592.       memory manager included in Helix Software's Netroom
  1593. SeeAlso: AX=0001h,AX=0002h,AX=0003h,AX=0004h,AX=0005h,INT 31/AH=57h,#0405
  1594.  
  1595. (Table 1891)
  1596. Values for Cloaking error code:
  1597.  0001h    no more selectors
  1598.  0002h    not a GDT ring 0 selector
  1599.  0003h    invalid selector (out of range, not user selector)
  1600.  0004h    selector not allocated
  1601. --------m-2C0001-----------------------------
  1602. INT 2C P - Cloaking - FREE GDT SELECTOR
  1603.     AX = 0001h
  1604.     SI = selector
  1605. Return: CF clear if successful
  1606.     CF set on error
  1607.         AX = error code (see #1891)
  1608. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1609. SeeAlso: AX=0000h,INT 2F/AX=4310h"Cloaking"
  1610. --------m-2C0002-----------------------------
  1611. INT 2C P - Cloaking - SET SEGMENT BASE ADDRESS
  1612.     AX = 0002h
  1613.     SI = selector
  1614.     EBX = new physical base addres
  1615. Return: CF clear if successful
  1616.     CF set on error
  1617.         AX = error code (see #1891)
  1618. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1619. SeeAlso: AX=0000h,AX=0003h,AX=0004h,INT 31/AX=0007h,#0405
  1620. --------m-2C0003-----------------------------
  1621. INT 2C P - Cloaking - SET SEGMENT LIMIT
  1622.     AX = 0003h
  1623.     SI = selector
  1624.     EBX = new limit
  1625. Return: CF clear if successful
  1626.     CF set on error
  1627.         AX = error code (see #1891)
  1628. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1629. SeeAlso: AX=0000h,AX=0002h,AX=0004h,INT 31/AX=0008h
  1630. --------m-2C0004-----------------------------
  1631. INT 2C P - Cloaking - SET SEGMENT ACCESS MODE
  1632.     AX = 0004h
  1633.     SI = selector
  1634.     CL = new access mode byte (see #0406)
  1635. Return: CF clear if successful
  1636.     CF set on error
  1637.         AX = error code (see #1891)
  1638. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1639. SeeAlso: AX=0000h,AX=0002h,AX=0003h,AX=0005h,INT 31/AX=0009h
  1640. --------m-2C0005-----------------------------
  1641. INT 2C P - Cloaking - SET SEGMENT EXTENDED ACCESS MODE
  1642.     AX = 0005h
  1643.     SI = selector
  1644.     CL = new extended access mode byte (limit field ignored) (see #1892)
  1645. Return: CF clear if successful
  1646.     CF set on error
  1647.         AX = error code (see #1891)
  1648. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1649. SeeAlso: AX=0000h,AX=0002h,AX=0003h,AX=0004h,INT 31/AX=0009h
  1650.  
  1651. Bitfields for extended access mode byte:
  1652. Bit(s)    Description    (Table 1892)
  1653.  7    4K granularity instead of byte granularity
  1654.  6    32-bit code segment
  1655.  5    reserved (0)
  1656.  4    segment available to system
  1657. SeeAlso: #0407
  1658. --------m-2C0006-----------------------------
  1659. INT 2C P - Cloaking - GET PROTECTED-MODE INTERRUPT VECTOR
  1660.     AX = 0006h
  1661.     CL = vector (00h-7Fh)
  1662. Return: CF clear
  1663.     DX:EBX -> current interrupt handler
  1664. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1665. SeeAlso: AX=0007h,INT 31/AX=0204h
  1666. --------m-2C0007-----------------------------
  1667. INT 2C P - Cloaking - SET PROTECTED-MODE INTERRUPT VECTOR
  1668.     AX = 0007h
  1669.     CL = vector (00h-7Fh)
  1670.     DX:EBX -> interrupt handler
  1671. Return: CF clear
  1672. Notes:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1673.     the IDT entry's type remains unchanged
  1674. SeeAlso: AX=0006h,INT 31/AX=0205h
  1675. --------m-2C0008-----------------------------
  1676. INT 2C P - Cloaking - GET PASSALONG ADDRESS
  1677.     AX = 0008h
  1678. Return: CF clear
  1679.     DX:EBX = current passalong address
  1680. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1681. SeeAlso: AX=0009h,AX=002Ch,INT 2F/AX=4310h"Cloaking"
  1682. --------m-2C0009-----------------------------
  1683. INT 2C P - Cloaking - SET PASSALONG ADDRESS
  1684.     AX = 0009h
  1685.     DX:EBX = new value for passalong address (see #1893)
  1686. Return: CF clear
  1687. Notes:    when an INT 2C instruction is executed in V86 mode, the Cloaking host
  1688.       calls the passalong address.    The handler should check whether the
  1689.       upcall is of interest to it, and if not it should jump to the old
  1690.       passalong address (retrieved with AX=0008h before the handler was
  1691.       installed).  The final handler should return with CF clear to cause
  1692.       the interrupt to be reflected back to V86 mode if none of the
  1693.       passalong handlers is triggered
  1694.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1695. SeeAlso: AX=0008h,AX=002Dh,INT 2C"PASSALONG CHAIN"
  1696.  
  1697. (Table 1893)
  1698. Values Cloaking passalong address is called with:
  1699.     EAX = CS:IP of byte following INT 2C instruction invoking passalong
  1700.     SS:EBX -> caller registers (see #1894)
  1701.     CF clear
  1702.     others undefined
  1703. Return: CF clear: pass along to V86-mode INT 2C handler
  1704.     CF set: return immediately to V86 mode
  1705.  
  1706. Format of Cloaking caller registers:
  1707. Offset    Size    Description    (Table 1894)
  1708.  00h    DWORD    EDI
  1709.  04h    DWORD    ESI
  1710.  08h    DWORD    EBP
  1711.  0Ch    DWORD    reserved (ESP from PUSHAD instruction)
  1712.  10h    DWORD    EBX
  1713.  14h    DWORD    EDX
  1714.  18h    DWORD    ECX
  1715.  1Ch    DWORD    EAX
  1716.  20h    DWORD    error code
  1717.  24h    DWORD    EIP
  1718.  28h    WORD    CS
  1719.  2Ah    WORD    padding
  1720.  2Ch    DWORD    EFLAGS
  1721.  30h    DWORD    ESP
  1722.  34h    WORD    SS
  1723.  36h    WORD    padding
  1724. --remainder not available if protected-mode ring3 trap---
  1725.  38h    WORD    ES
  1726.  3Ah    WORD    padding
  1727.  3Ch    WORD    DS
  1728.  3Eh    WORD    padding
  1729.  40h    WORD    FS
  1730.  42h    WORD    padding
  1731.  44h    WORD    GS
  1732.  46h    WORD    padding
  1733. --------m-2C000A-----------------------------
  1734. INT 2C P - Cloaking - GET BASE ADDRESS OF GDT SELECTOR
  1735.     AX = 000Ah
  1736.     SI = selector
  1737. Return: CF clear if successful
  1738.         EBX = segment base address
  1739.     CF set on error
  1740.         AX = error code (see #1891)
  1741. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00, the
  1742.       memory manager included in Helix Software's Netroom
  1743. SeeAlso: AX=0000h,AX=0002h,AX=000Bh
  1744. --------m-2C000B-----------------------------
  1745. INT 2C P - Cloaking - GET SELECTOR LIMIT
  1746.     AX = 000Bh
  1747.     SI = selector
  1748. Return: CF clear if successful
  1749.         EBX = segment base address
  1750.     CF set on error
  1751.         AX = error code (see #1891)
  1752. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1753. SeeAlso: AX=000Ah,INT 2F/AX=4310h"Cloaking"
  1754. --------m-2C---------------------------------
  1755. INT 2C P - RM386 v6.00 - CLOAKING - RESERVED FOR CLOAKED BIOS USE UNDER WINDOWS
  1756.     AX = function (000Ch-001Fh)
  1757. --------m-2C000F-----------------------------
  1758. INT 2C P - Cloaking v1.01 - "Simulate_Shell_Event"
  1759.     AX = 000Fh
  1760.     ECX = event code (see #1895)
  1761.     DX = subfunction for event
  1762.     EDX high word = boost value (see #1896)
  1763.     SI:EDI -> completion procedure
  1764. Return: CF clear if successful (event scheduled)
  1765.     CF set on error
  1766. Note:    this function is only available while MS Windows is running
  1767. SeeAlso: AX=0011h,AX=0012h,INT 2F/AX=1605h,INT 2F/AX=4310h"Cloaking"
  1768.  
  1769. (Table 1895)
  1770. Values for Cloaking shell event code:
  1771.  0414h    Hot key event
  1772.     subevent 0000h: Alt-Space
  1773.     subevent 0001h: Alt-Enter
  1774.     subevent 0002h: Dir-VM
  1775.  0415h    Switch context
  1776.     subevent 0000h for DOS VM context, nonzero for System VM context
  1777.  0416h    Clipboard event
  1778.  0417h    Termination event
  1779.     subevent 0000h for normal termination, nonzero for error
  1780.  0418h    Display message
  1781.     subevent 0000h for normal message, nonzero for system model ASAP
  1782.  0419h    Crash
  1783.  041Ah    Paste complete
  1784.     subevent 0000h: normal
  1785.     subevent 0001h: cancelled by user
  1786.     subevent 0002h: cancelled
  1787.  041Bh    Contention event
  1788.  041Ch    Screen switch
  1789.     subevent 0000h: forward
  1790.     subevent 0001h: back
  1791.  041Dh    Filesystem change
  1792.  041Eh    Check Focus
  1793.  041Fh    Panic
  1794.  
  1795. Bitfields for boost value:
  1796. Bit(s)    Description    (Table 1896)
  1797.  0    boost system VM until focus changes
  1798.  1    boost system VM on Switcher screen
  1799.  2    boost system VM until response
  1800.  3    boost system VM during clipboard activity
  1801.  4    boost system VM during print screen
  1802.  5    boost system VM during update
  1803. --------m-2C0011-----------------------------
  1804. INT 2C P - Cloaking v1.01 - "Switch_VMs_and_Call_back"
  1805.     AX = 0011h
  1806.     EBX = handle of VM to be made active
  1807.     SI:EDI -> 32-bit FAR completion procedure
  1808. Return: CF clear if successful (scheduled)
  1809.     CF set on error
  1810. Notes:    this function is only available while MS Windows is running
  1811.     the completion procedure is called with CF clear if the specified
  1812.       VM has been made active, or with CF set on error
  1813. SeeAlso: AX=000Fh,AX=0012h
  1814. --------m-2C0012-----------------------------
  1815. INT 2C P - Cloaking v1.01 - "Query_Current_VM"
  1816.     AX = 0012h
  1817. Return: CF clear
  1818.     EBX = handle of active VM
  1819.     ESI = handle of system VM
  1820.     ECX = VM status flags (see #1897)
  1821.     EDX = shell flags (see #1898)
  1822. Note:    this function is only available while MS Windows is running in enhanced
  1823.       mode
  1824. SeeAlso: AX=000Fh,AX=0011h,AX=0013h
  1825.  
  1826. Bitfields for VM status flags:
  1827. Bit(s)    Description    (Table 1897)
  1828.  0    in exclusive mode
  1829.  1    runs in background
  1830.  2    being created
  1831.  3    suspended
  1832.  4    not executable
  1833.  5    executing in protected mode
  1834.  6    contains PM application
  1835.  7    32-bit PM application
  1836.  8    called from VxD
  1837.  9    high priority background
  1838.  10    blocked on semaphore
  1839.  11    awakening
  1840.  12    has pageable V86
  1841.  13    has locked V86
  1842.  14    is scheduled
  1843.  15    idle
  1844.  16    closing
  1845.  
  1846. Bitfields for shell flags:
  1847. Bit(s)    Description    (Table 1898)
  1848.  2    windowed
  1849.  5    Alt-Tab reserved
  1850.  6    Alt-Esc reserved
  1851.  7    Alt-Space reserved
  1852.  8    Alt-PrtSc reserved
  1853.  9    Alt-Enter reserved
  1854.  10    Alt-PrtSc reserved
  1855.  11    PrtSc reserved
  1856.  12    polling enabled
  1857.  13    no HMA
  1858.  14    has shortcut key
  1859.  15    locked EMS handles
  1860.  16    locked XMS handles
  1861.  17    fast paste enabled
  1862.  18    locked V86 memory
  1863.  30    close-on-exit enabled
  1864. --------m-2C0013-----------------------------
  1865. INT 2C P - Cloaking v1.01 - "Issue_System_Modal_Message"
  1866.     AX = 0013h
  1867.     EDX = message box flags (see #1899)
  1868.     DS:ECX -> ASCIZ message text
  1869.     DS:EDI -> ASCIZ caption
  1870. Return: CF clear
  1871.     EAX = response code
  1872. Note:    this function is only available while MS Windows is running in enhanced
  1873.       mode
  1874. SeeAlso: AX=000Fh,AX=0012h
  1875.  
  1876. Bitfields for message box flags:
  1877. Bit(s)    Description    (Table 1899)
  1878.  3-0    response codes (see #1900)
  1879.  7-4    icon codes
  1880.     1 = Warning hand
  1881.     2 = exclamation mark
  1882.     4 = asterisk
  1883.  9-8    default response (0 = first button, 1 = second, 2 = third)
  1884.  12    message is system model
  1885.  15    don't change focus
  1886.  29    hang with interrupts enabled
  1887.  30    do not window
  1888.  31    execute ASAP
  1889.  
  1890. (Table 1900)
  1891. Values for response codes:
  1892.  00h    OK
  1893.  01h    OK, Cancel
  1894.  02h    Abort, Retry, Ignore
  1895.  03h    Yes, No, Cancel
  1896.  04h    Yes, No
  1897.  05h    Retry, Cancel
  1898. --------m-2C001D-----------------------------
  1899. INT 2C P - Cloaking v1.01 - GET INT 2C API HANDLER ENTRY POINT
  1900.     AX = 001Dh
  1901. Return: CF clear
  1902.     DX:EBX = selector:offset of Cloaking host INT 2C handler
  1903. Desc:    get the Cloaking host's entry point to bypass any other programs
  1904.       which may have hooked INT 2C in protected mode
  1905. Note:    the returned entry point must be called with a simulated INT, i.e.
  1906.       a PUSHD must precede the far call to the handler
  1907. SeeAlso: INT 2F/AX=4310h"Cloaking"
  1908. --------m-2C001E-----------------------------
  1909. INT 2C P - Cloaking v1.01 - CLEAR CRITICAL SECTION
  1910.     AX = 001Eh
  1911. Return: CF clear
  1912. Desc:    allow MS Windows to switch to another VM after having prevented it
  1913.       by invoking a critical section
  1914. SeeAlso: AX=001Fh,INT 15/AX=101Ch,INT 2F/AX=1682h
  1915. --------m-2C001F-----------------------------
  1916. INT 2C P - Cloaking v1.01 - SET CRITICAL SECTION
  1917.     AX = 001Fh
  1918. Return: CF clear
  1919. Desc:    prevent MS Windows from switching to another VM
  1920. SeeAlso: AX=001Eh,INT 15/AX=101Bh,INT 2F/AX=1681h
  1921. --------m-2C0020-----------------------------
  1922. INT 2C P - Cloaking - GET SIZE OF PROTECTED-MODE STATE
  1923.     AX = 0020h
  1924. Return: EAX = number of bytes required for storing state
  1925. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1926. SeeAlso: AX=0021h,AX=0022h
  1927. --------m-2C0021-----------------------------
  1928. INT 2C P - Cloaking - SAVE PROTECTED-MODE STATE
  1929.     AX = 0021h
  1930.     ES:EDI -> buffer for protected-mode state
  1931. Return: CF clear
  1932.     buffer filled
  1933. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1934. SeeAlso: AX=0020h,AX=0022h
  1935. --------m-2C0022-----------------------------
  1936. INT 2C P - Cloaking - RESTORE PROTECTED-MODE STATE
  1937.     AX = 0022h
  1938.     DS:ESI -> buffer containing previously-saved protected-mode state
  1939. Return: CF clear if successful
  1940.         state restored
  1941.     CF set on error (invalid buffer contents)
  1942. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1943. SeeAlso: AX=0020h,AX=0021h
  1944. --------m-2C0023-----------------------------
  1945. INT 2C P - Cloaking - ISSUE PROTECTED-MODE XMS CALL
  1946.     AX = 0023h
  1947. Notes:    not currently implemented--NOP in RM386 v6.00
  1948.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1949. --------m-2C0024-----------------------------
  1950. INT 2C P - Cloaking - SET V86-MODE STACK
  1951.     AX = 0024h
  1952.     DX:EBX = new value for V86-mode SS:ESP
  1953. Return: nothing
  1954. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1955. --------m-2C0025-----------------------------
  1956. INT 2C P - Cloaking - CALL V86-MODE PROCEDURE
  1957.     AX = 0025h
  1958.     DS:EBX -> client register structure (see #1894)
  1959. Return: CF clear if successful
  1960.         client register structure updated
  1961.     CF set if no more nested procedure call space available
  1962. Notes:    this call uses the V86-mode stack supplied in the client structure, and
  1963.       calls the routine specified by CS:IP in the client structure
  1964.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1965. SeeAlso: AX=0026h,AX=0027h,INT 31/AX=0301h
  1966. --------m-2C0026-----------------------------
  1967. INT 2C P - Cloaking - CALL V86-MODE INTERRUPT HANDLER
  1968.     AX = 0026h
  1969.     DS:EBX -> client register structure (see #1894)
  1970.     CX = interrupt number
  1971. Return: CF clear if successful
  1972.         client register structure updated
  1973.     CF set if no more nested procedure call space available
  1974. Notes:    this call uses the V86-mode stack supplied in the client structure
  1975.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1976. SeeAlso: AX=0025h,AX=0027h,INT 31/AX=0300h
  1977. --------m-2C0027-----------------------------
  1978. INT 2C P - Cloaking - CHAIN TO V86-MODE INTERRUPT HANDLER
  1979.     AX = 0027h
  1980.     DS:EBX -> client register structure (see #1894)
  1981. Return: CF clear if successful
  1982.         client register structure updated
  1983.     CF set if no more nested procedure call space available
  1984. Notes:    this call uses the V86-mode stack supplied in the client structure,
  1985.       and jumps to the address specified by CS:IP in the client structure
  1986.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1987. SeeAlso: AX=0025h,AX=0026h
  1988. --------m-2C0028-----------------------------
  1989. INT 2C P - Cloaking - GET ESP0 FROM TSS
  1990.     AX = 0028h
  1991. Return: CF clear
  1992.     EAX = TSS's ESP0
  1993. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00, the
  1994.       memory manager included in Helix Software's Netroom
  1995. --------m-2C0029-----------------------------
  1996. INT 2C P - Cloaking - SET SECONDARY STACK
  1997.     AX = 0029h
  1998.     DX:EBX = new value for SS:ESP of ring 3 secondary stack
  1999. Return: CF clear
  2000. Desc:    inform RM386 of the ring 3 interrupt stack location
  2001. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  2002. --------m-2C002A-----------------------------
  2003. INT 2C P - Cloaking - SET 8259 IRQ BASE VECTORS
  2004.     AX = 002Ah
  2005.     BL = base vector of master interrupt controller
  2006.     CL = base vector of slave interrupt controller
  2007. Notes:    this call merely informs RM386 that the caller has changed the
  2008.       interrupt mappings
  2009.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  2010. SeeAlso: INT 67/AX=DE0Bh
  2011. --------m-2C002BCH81-------------------------
  2012. INT 2C P - Cloaking - PROTECTED-MODE VIRTUAL DMA SERVICES
  2013.     AX = 002Bh
  2014.     CH = 81h
  2015.     CL = subfunction (02h-0Ch)
  2016.     other registers as appropriate for subfunction
  2017. Return: varies by function
  2018.     CF set on error
  2019. Notes:    these functions are equivalent to the INT 4B/AX=81xxh subfunctions
  2020.       with the same numbers
  2021.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  2022. SeeAlso: INT 4B/AX=8102h,INT 4B/AX=810Ch
  2023. --------m-2C002C-----------------------------
  2024. INT 2C P - Cloaking - GET PORT-TRAPPING PASSALONG
  2025.     AX = 002Ch
  2026. Return: CF clear
  2027.     DX:EBX = current I/O trapping passalong address
  2028. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  2029. SeeAlso: AX=0008h,AX=002Dh
  2030. --------m-2C002D-----------------------------
  2031. INT 2C P - Cloaking - SET PORT-TRAPPING PASSALONG
  2032.     AX = 002Dh
  2033.     DX:EBX = new I/O trapping passalong address (see #1901)
  2034. Return: CF clear
  2035. Notes:    RM386 calls the passalong address whenever an access to a monitored
  2036.       I/O port is attempted; the handler should check whether it is a port
  2037.       that it is interested in, and if not call the previous passalong
  2038.       address (which was retrieved with AX=002Ch before installing the
  2039.       new handler)
  2040.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  2041. SeeAlso: AX=0009h,AX=002Ch,INT 67/AX=5DEAh
  2042.  
  2043. (Table 1901)
  2044. Values Cloaking port-trapping passalong address is called with:
  2045.     EAX = CS:IP of faulting instruction (unless executing in protected-mode
  2046.         ring 3)
  2047.     SS:EBX -> caller register structure (see #1894)
  2048.         check EFLAGS V86-mode bit for type
  2049.     CX = first two bytes of I/O instruction which was trapped
  2050.     DX = port to which I/O is being performed
  2051.     CF clear
  2052. Return: CF clear if RM386 should perform I/O operation
  2053.     CF set if I/O should be skipped
  2054. Note:    RM386 skips the trapped I/O instruction, so the passalong handler
  2055.       should not modify the client CS:EIP
  2056. --------m-2C002E-----------------------------
  2057. INT 2C P - Cloaking - TRAP I/O PORT
  2058.     AX = 002Eh
  2059.     DX = port number to trap
  2060. Return: CF clear if successful
  2061.     CF set on error (port out of range or reserved)
  2062. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  2063. SeeAlso: AX=002Fh,AX=0030h
  2064. --------m-2C002F-----------------------------
  2065. INT 2C PU - Cloaking - UNTRAP I/O PORT
  2066.     AX = 002Fh
  2067.     DX = port number for which to cancel trapping
  2068. Return: CF clear if successful
  2069.     CF set on error (port out of range or reserved)
  2070. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  2071. SeeAlso: AX=002Eh,AX=0030h
  2072. --------m-2C0030-----------------------------
  2073. INT 2C PU - Cloaking - GET TRAPPING STATE OF SPECIFIED PORT
  2074.     AX = 0030h
  2075.     DX = port number
  2076. Return: CF clear if successful
  2077.        BX = current state (0000h not trapped, 0001h trapped)
  2078.     CF set on error (port out of range or reserved)
  2079. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  2080. SeeAlso: AX=002Eh,AX=002Fh
  2081. --------m-2C0031-----------------------------
  2082. INT 2C PU - RM386 v6.00 - BUG
  2083.     AX = 0031h
  2084. Program: RM386 (RAM-MAN/386) is the memory manager included in Helix
  2085.       Software's Netroom
  2086. Note:    due to a fencepost error, RM386 v6.00 will branch unpredictably if
  2087.       invoked with this function
  2088. --------m-2C0031-----------------------------
  2089. INT 2C P - Cloaking v1.01 - ALLOCATE V86 CALLBACK
  2090.     AX = 0031h
  2091.     DX:EBX = CS:EIP of protected-mode routine to be invoked by callback
  2092. Return: CF clear if successful
  2093.         EBX = CS:IP of V86-mode callback handler
  2094.     CF set on error
  2095. SeeAlso: AX=0032h
  2096. --------m-2C0032-----------------------------
  2097. INT 2C P - Cloaking v1.01 - FREE V86 CALLBACK
  2098.     AX = 0032h
  2099.     EBX = CS:IP of V86-mode callback handler
  2100. Return: CF clear if successful
  2101.     CF set on error
  2102.         AX = error code
  2103.         0005h invalid callback address
  2104.         0006h callback already free
  2105. SeeAlso: AX=0032h
  2106. --------m-2C0033-----------------------------
  2107. INT 2C P - Cloaking v1.01 - REGISTER CLOAKING CLIENT
  2108.     AX = 0033h
  2109.     DS:EDX -> client registration structure (see #1902)
  2110. Return: CF clear if successful
  2111.     CF set on error (linked list corrupt)
  2112. SeeAlso: AX=0034h,#2058 at INT 2F/AX=4310h"Cloaking"
  2113.  
  2114. Format of client registration structure:
  2115. Offset    Size    Description    (Table 1902)
  2116.  00h    PWORD    link to next structure
  2117.  06h    PWORD    link to previous structure
  2118.  0Ch  2 BYTEs    client version (major, minor)
  2119.  0Eh 20 BYTEs    client name
  2120.  22h    DWORD    physical address of client start
  2121.  26h    DWORD    client's total size in bytes
  2122. Note:    the link area should not be modified once the structure has been
  2123.       used for the registration call
  2124. --------m-2C0034-----------------------------
  2125. INT 2C P - Cloaking v1.01 - UNREGISTER CLOAKING CLIENT
  2126.     AX = 0034h
  2127.     DS:EDX -> client registration structure (see #1902)
  2128. Return: CF clear if successful
  2129.     CF set on error (linked list corrupt)
  2130. Note:    the client must unregister before freeing the XMS block containing
  2131.       its registration structure(s)
  2132. SeeAlso: AX=0033h,#2058 at INT 2F/AX=4310h"Cloaking"
  2133. --------D-2D---------------------------------
  2134. INT 2D - DOS 2+ - RESERVED
  2135. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  2136. BUG:    RM386 v6.00-6.02 (as distributed with Helix's Netroom v3.x) contains
  2137.       a stack bug in its protected-mode INT 2D handler which causes a crash
  2138.       when INT 2D is invoked from V86 mode
  2139. --------t-2D---------------------------------
  2140. INT 2D - ALTERNATE MULTIPLEX INTERRUPT SPECIFICATION (AMIS) [v3.6]
  2141.     AH = multiplex number
  2142.     AL = function
  2143.         00h installation check
  2144.         01h get private entry point
  2145.         02h uninstall
  2146.         03h request popup
  2147.         04h determine chained interrupts
  2148.         05h get hotkey list
  2149.         06h get device-driver information
  2150.         07h-0Fh reserved for future enhancements
  2151.         Return: AL = 00h (not implemented)
  2152.         other  application-dependent
  2153.     other registers vary by function (also see individual entries below)
  2154. Return: varies by function
  2155. Notes:    programs should not use fixed multiplex numbers; rather, a program
  2156.       should scan all multiplex numbers from 00h to FFh, remembering the
  2157.       first unused multiplex in case the program is not yet installed.
  2158.       For multiplex numbers which are in use, the program should compare
  2159.       the first 16 bytes of the signature string to determine whether it
  2160.       is already installed on that multiplex number.  If not previously
  2161.       installed, it should use the first free multiplex number.
  2162.     functions other than 00h are not valid unless a program is installed
  2163.       on the selected multiplex number
  2164.     to be considered fully compliant with version 3.6 of the specification,
  2165.       programs must implement at least functions 00h, 02h (no resident
  2166.       uninstall code required), and 04h (return value 04h).     TSRs that
  2167.       provide hotkeys with which the user can activate them must also
  2168.       implement function 05h.  TSRs which provide DOS device drivers must
  2169.       also implement function 06h.    The absolute minimum fully-compliant
  2170.       implementation has an overhead of 64 bytes (80 bytes with function
  2171.       05h) plus 22 bytes per hooked interrupt (for the interrupt sharing
  2172.       protocol header and hook list entry).
  2173.     the signature string and description may be used by memory mappers
  2174.       to display the installed programs
  2175.     to be considered fully compliant, users of this specification must
  2176.       adhere to the IBM interrupt sharing protocol (see #1903), which will
  2177.       permit removal of TSRs in arbitrary order and interrupt handler
  2178.       reordering.  All TSRs following this specification should be
  2179.       removable unless they are loaded from CONFIG.SYS, though they need
  2180.       not keep the code for removing themselves resident; it is acceptable
  2181.       for a separate program to perform the interrupt unhooking and
  2182.       memory-freeing steps of removal.
  2183.     A sample public-domain implementation including example TSRs and
  2184.       utility programs may be found in a separate package distributed as
  2185.       AMISLnnn.ZIP (AMISL092.ZIP as of this writing).
  2186.     Please let me know if you choose to follow this proposal.  The
  2187.       signature and a list of the private API calls you use would be
  2188.       appreciated, as well.
  2189. SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=04h
  2190. SeeAlso: INT 2D/AL=05h,INT 2D/AL=06h,INT 2F"NOTES"
  2191.  
  2192. Format of interrupt sharing protocol interrupt handler entry point:
  2193. Offset    Size    Description    (Table 1903)
  2194.  00h  2 BYTEs    short jump to actual start of interrupt handler, immediately
  2195.           following this data block (EBh 10h)
  2196.  02h    DWORD    address of next handler in chain
  2197.  06h    WORD    signature 424Bh
  2198.  08h    BYTE    EOI flag
  2199.         00h software interrupt or secondary hardware interrupt handler
  2200.         80h primary hardware interrupt handler (will issue EOI)
  2201.  09h  2 BYTEs    short jump to hardware reset routine
  2202.         must point at a valid FAR procedure (may be just RETF)
  2203.  0Bh  7 BYTEs    reserved (0) by IBM for future expansion
  2204. Note:    when chaining to the prior handler, the interrupt handler must perform
  2205.       an indirect jump/call using the address at offset 02h in the
  2206.       ISP header.  This permits another AMIS TSR to hook itself into
  2207.       the chain at a position other than as the first handler to receive
  2208.       an interrupt.
  2209. SeeAlso: INT F1/AH=01h"Common ISDN API",INT F1/AH=06h"CAPI",#3281
  2210. --------t-2D--00-----------------------------
  2211. INT 2D - AMIS v3.0+ - INSTALLATION CHECK
  2212.     AL = 00h
  2213.     AH = multiplex number for program
  2214. Return: AL = 00h if free
  2215.     AL = FFh if multiplex number in use
  2216.         CX = binary version number (CH = major, CL = minor)
  2217.         DX:DI -> signature string (see #1904) identifying the program
  2218.           using the multiplex number
  2219. SeeAlso: INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=04h,INT 2D/AL=05h
  2220. SeeAlso: INT 2D/AL=06h
  2221. Index:    installation check;Alternate Multiplex Interrupt Specification
  2222. Index:    installation check;AMIS|installation check;FASTMOUS
  2223. Index:    installation check;SPELLER|installation check;Monitor
  2224. Index:    installation check;NOLPT|installation check;NOTE
  2225. Index:    installation check;RBkeyswp|installation check;SWITCHAR
  2226. Index:    installation check;VGABLANK|installation check;EATMEM
  2227. Index:    installation check;RECALL|installation check;XPTR2
  2228.  
  2229. Format of AMIS signature string:
  2230. Offset    Size    Description    (Table 1904)
  2231.  00h  8 BYTEs    blank-padded manufacturer's name (possibly abbreviated)
  2232.  08h  8 BYTEs    blank-padded product name
  2233.  10h 64 BYTEs    ASCIZ product description (optional, may be a single 00h)
  2234. Note:    it is not necessary to reserve a full 64 bytes for the description,
  2235.       just enough to store the actual ASCIZ string
  2236. SeeAlso: #1905
  2237.  
  2238. (Table 1905)
  2239. Values for AMIS signatures known to be in use:
  2240.  'Byrial J' 'EKLAVO  '    permits keyboard entry of Esperanto accented letters
  2241.  'CoveSoft' 'Burnout+'    shareware screen saver Burnout Plus
  2242.  'Crynwr  ' 'SPELLER '    TSR spelling-checker
  2243.  'CPH1995 ' 'CDTSR   '    resident CD-Audio player
  2244.  'CPH1996 ' 'DSAPI   '
  2245.  'CSJewell' 'Modula3L'    Curtis Jewell's Modula-3 compiler (non-TSR)
  2246.  'DAISYCHA' 'INDRIVER'    Advanced Parallel Port daisy chain driver (vendor name
  2247.               in product description field, if desired)
  2248.             (see also INT 2D/AL=DCh)
  2249.  'DTown SD' 'DTU     '    DTown Software Development's DTown Utilities
  2250.             (see also INT 2D/AL=20h)
  2251.  'ECLIPSE ' 'PLUMP   '    Eclipse Software's printer and plotter spooler
  2252.  'GraySoft' 'GIPC    '    GraySoft's Inter-Process Communications driver
  2253.  'heathh  ' 'Monitor '
  2254.  'Helge O '        TSRs by Helge Olav Helgesen
  2255.  'J. Berry' 'RATSR   '    RemoteAccess Network Manager workstation module
  2256.  'JWB      ' 'RAMLIGHT'    James Birdsall's on-screen RAMdisk activity indicator
  2257.  'M Better' 'iHPFS   '    Marcus Better's HPFS filesystem driver for DOS
  2258.  'M. Paul ' 'FREEVER '    DOS version-faking TSR by Matthias Paul
  2259.  'Nildram ' 'ST         '    Screen Thief graphics screen grabber
  2260.  'Pino Nav' 'ALTMENU '    activate any program's menu bar by pressing Alt key
  2261.  'Pino Nav' 'Keybit  '    Pino Navato's KEYBIT Lite Italian keyboard driver v4+
  2262.  'PowrQuot' 'CAPRILOG'
  2263.  'PowrQuot' 'CAPRITSR'
  2264.  'PowrQuot' 'CAPRIWIN'
  2265.  'R-Ware  ' 'dLite   '    run-time data decompression TSR
  2266.  'Ralf B  ' 'disaXXYY'    RBdisabl -- disable key scancode XX w/ shift states YY
  2267.  'Ralf B  ' 'DUALVGA '    dual-VGA support, screen blanker, and DPMS driver
  2268.  'Ralf B  ' 'FASTMOUS'    example TSR included with sample AMIS library code
  2269.  'Ralf B  ' 'NoBreak '    disable Ctrl-@, Ctrl-C, and Ctrl-Break keys
  2270.  'Ralf B  ' 'NOLPT n '    example TSR -- turn LPTn into bit-bucket
  2271.  'Ralf B  ' 'NOTE    '    example TSR -- popup note-taker
  2272.  'Ralf B  ' 'RBclock '    RBclock -- on-screen real-time clock
  2273.  'Ralf B  ' 'RBclockE'    RBclock -- on-screen elapsed-time clock
  2274.  'Ralf B  ' 'RBdvorak'    Dvorak keyboard mapping w/ opt Esc/~, LCtrl/CapsLk swap
  2275.  'Ralf B  ' 'RBkcount'    display count of keystrokes on screen
  2276.  'Ralf B  ' 'RBkeyswp'    RBkeyswap v3.0+ -- swap Esc/~ and LCtrl/CapsLock keys
  2277.  'Ralf B  ' 'RBnoboot'    disable Ctrl-Alt-Del key combination
  2278.  'Ralf B  ' 'ShftCaps'    require Shift-CapsLock to turn on CapsLock
  2279.  'Ralf B  ' 'ShftNumL'    require Shift-NumLock to turn off NumLock
  2280.  'Ralf B  ' 'SWITCHAR'    example TSR -- add switchar() support removed from DOS5
  2281.  'Ralf B  ' 'VGABLANK'    VGA-only screen blanker
  2282.  'Sally IS' 'Mdisk   '    removeable, resizeable RAMdisk
  2283.  'Sally IS' 'Scr2Tex '    screen dumper with output in (La)Tex format
  2284.  'SRT      ' 'STOPBOOT'    reboot preventer by Steve Talbot
  2285.  'Thaco      ' 'NEST    '    Eirik Pedersen's programmer's delimiter matcher
  2286.  'TifaWARE' 'EATMEM  '    George A. Theall's public domain memory restrictor for
  2287.             testing programs (v1.1+)
  2288.  'TifaWARE' 'RECALL  '    public domain commandline editor and history (v1.2+)
  2289.  'Todd      ' 'XPTR2   '    PC-to-Transputer interface by Todd Radel
  2290.  'WlkngOwl' 'NoiseSYS'    NOISE.SYS random-number generator
  2291. SeeAlso: #1904
  2292. --------t-2D--01-----------------------------
  2293. INT 2D - AMIS v3.0+ - GET PRIVATE ENTRY POINT
  2294.     AL = 01h
  2295.     AH = multiplex number for program
  2296. Return: AL = 00h if all API calls via INT 2D
  2297.     AL = FFh if entry point supported
  2298.         DX:BX -> entry point for bypassing interrupt chain
  2299. Note:    this function is not valid unless a program is installed on the
  2300.       specified multiplex number; use INT 2D/AL=00h to check
  2301. SeeAlso: INT 2D/AL=00h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=04h,INT 2D/AL=05h
  2302. SeeAlso: INT 2D/AL=06h
  2303. Index:    entry point;Alternate Multiplex Interrupt|entry point;AMIS
  2304. --------t-2D--02-----------------------------
  2305. INT 2D - AMIS v3.0+ - UNINSTALL
  2306.     AL = 02h
  2307.     AH = multiplex number for program
  2308.     DX:BX = return address for successful uninstall (may be    ignored by TSR)
  2309. Return: AL = status
  2310.         00h not implemented (makes TSR non-compliant with specification)
  2311.         01h unsuccessful
  2312.         02h can not uninstall yet, will do so when able
  2313.         03h safe to remove, but no resident uninstaller
  2314.           (TSR still enabled)
  2315.         BX = segment of memory block with resident code
  2316.         04h safe to remove, but no resident uninstaller
  2317.           (TSR now disabled)
  2318.         BX = segment of memory block with resident code
  2319.         05h not safe to remove now, try again later
  2320.         06h disabled, but can not be removed from memory
  2321.           because loaded from CONFIG.SYS
  2322.         07h safe to remove, but no resident device-driver
  2323.           uninstaller.    Caller must unlink device
  2324.           drivers from DOS device chain as well as
  2325.           unhooking interrupts and freeing memory
  2326.         BX = segment of memory block with resident code
  2327.         FFh successful
  2328.     return at DX:BX with AX destroyed if successful and TSR honors
  2329.       specific return address
  2330. Note:    this function is not valid unless a program is installed on the
  2331.       specified multiplex number; use INT 2D/AL=00h to check
  2332. SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=03h,INT 2D/AL=04h,INT 2D/AL=05h
  2333. SeeAlso: INT 2D/AL=06h
  2334. Index:    uninstall;Alternate Multiplex Interrupt Specification|uninstall;AMIS
  2335. --------t-2D--03-----------------------------
  2336. INT 2D - AMIS v3.0+ - REQUEST POP-UP
  2337.     AL = 03h
  2338.     AH = multiplex number for program
  2339. Return: AL = status
  2340.         00h not implemented or TSR is not a pop-up
  2341.         01h can not pop up at this time, try again later
  2342.         02h can not pop up yet, will do so when able
  2343.         03h already popped up
  2344.         04h unable to pop up, user intervention required
  2345.         BX = standard reason code
  2346.             0000h unknown failure
  2347.             0001h interrupt chain passes through memory
  2348.               which must be swapped out to pop up
  2349.             0002h swap-in failed
  2350.         CX = application's reason code if nonzero
  2351.         FFh TSR popped up and was exited by user
  2352.         BX = return value
  2353.             0000h no return value
  2354.             0001h TSR unloaded
  2355.             0002h-00FFh reserved
  2356.             0100h-FFFFh application-dependent
  2357. Note:    this function is not valid unless a program is installed on the
  2358.       specified multiplex number; use INT 2D/AL=00h to check
  2359. SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=04h,INT 2D/AL=05h
  2360. SeeAlso: INT 2D/AL=06h
  2361. --------t-2D--04-----------------------------
  2362. INT 2D - AMIS v3.0+ - DETERMINE CHAINED INTERRUPTS
  2363.     AL = 04h
  2364.     AH = multiplex number for program
  2365.     BL = interrupt number (except 2Dh)
  2366. Return: AL = status
  2367.         00h not implemented (makes TSR non-compliant with specification)
  2368.         01h (obsolete) unable to determine
  2369.         02h (obsolete) interrupt hooked
  2370.         03h (obsolete) interrupt hooked, address returned
  2371.         DX:BX -> TSR's interrupt BL handler
  2372.         04h list of hooked interrupts returned
  2373.         DX:BX -> interrupt hook list (see #1906)
  2374.         FFh interrupt not hooked
  2375. Notes:    BL is ignored if the TSR returns AL=04h; in that case, the caller
  2376.       needs to scan the return list rather than making additional calls
  2377.       to this function.  If the return is not 00h or 04h, then the caller
  2378.       must cycle through the remaining interrupt numbers it wishes to
  2379.       check.
  2380.     return values 01h through 03h may not be used by AMIS v3.6-compliant
  2381.       programs; they are included here solely for compatibility with
  2382.       version 3.3, though they were probably never used in any
  2383.       implementation
  2384.     for return values 01h through 03h, since INT 2D is known to be hooked,
  2385.       the resident code need not test for BL=2Dh (to minimize its size),
  2386.       and the return value is therefore undefined in that case.
  2387.     this function is not valid unless a program is installed on the
  2388.       specified multiplex number; use INT 2D/AL=00h to check
  2389. SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=05h
  2390. SeeAlso: INT 2D/AL=06h
  2391.  
  2392. Format of AMIS interrupt hook list [array]:
  2393. Offset    Size    Description    (Table 1906)
  2394.  00h    BYTE    interrupt number (last entry in array is 2Dh)
  2395.  01h    WORD    offset within hook list's segment of the interrupt handler
  2396.         this will point at the initial short jump of the interrupt
  2397.           sharing protocol header (see #1903)
  2398. SeeAlso: #1907
  2399. --------t-2D--05-----------------------------
  2400. INT 2D - AMIS v3.5+ - GET HOTKEYS
  2401.     AL = 05h
  2402.     AH = multiplex number for program
  2403. Return: AL = status
  2404.         00h not implemented
  2405.         FFh supported
  2406.         DX:BX -> hotkey list (see #1907)
  2407. Notes:    this function is not valid unless a program is installed on the
  2408.       specified multiplex number; use INT 2D/AL=00h to check
  2409.     programs which provide hotkeys are required to provide this function
  2410.       to be fully compliant with this specification
  2411. SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=04h
  2412. SeeAlso: INT 2D/AL=06h
  2413.  
  2414. Format of AMIS hotkey list:
  2415. Offset    Size    Description    (Table 1907)
  2416.  00h    BYTE    type of hotkey checking (see #1908)
  2417.  01h    BYTE    number of hotkeys (may be zero if TSR can disable hotkeys)
  2418.  02h 6N BYTEs    array of hotkey definitions
  2419.         (one per hotkey, first should be primary hotkey)
  2420.         Offset    Size    Description
  2421.          00h    BYTE    hotkey scan code (00h/80h if shift states only)
  2422.                 hotkey triggers on release if bit 7 set
  2423.          01h    WORD    required shift states (see #1909)
  2424.          03h    WORD    disallowed shift states (see #1909)
  2425.          05h    BYTE    hotkey flags (see #1910)
  2426. Notes:    except for bit 7, the shift states correspond exactly to the return
  2427.       values from INT 16/AH=12h.  A set bit in the required states word
  2428.       indicates that the corresponding shift state must be active when the
  2429.       hotkey's scan code is received for the hotkey to be recognized; a
  2430.       clear bit means that the corresponding state may be ignored.    A set
  2431.       bit in the disallowed shift states word indicates that the
  2432.       corresponding shift state must be inactive.
  2433.     for the disallowed-states word, if one of the "either" bits is set,
  2434.       then both the corresponding left bit and right bit must be set
  2435.     examples:
  2436.         Ctrl-Alt-Del monitoring: 53h 000Ch 0003h 06h
  2437.         Alt-key tap (DESQview):     B8h 0000h 0007h 08h
  2438.         Shf-Shf-N (NOTE.COM):     31h 0003h 000Ch 00h
  2439. Index:    hotkeys;AMIS
  2440. SeeAlso: #0005
  2441.  
  2442. Bitfields for type of AMIS hotkey checking:
  2443. Bit(s)    Description    (Table 1908)
  2444.  0    checks before chaining INT 09
  2445.  1    checks after chaining INT 09
  2446.  2    checks before chaining INT 15/AH=4Fh
  2447.  3    checks after chaining INT 15/AH=4Fh
  2448.  4    checks on INT 16/AH=00h,01h,02h
  2449.  5    checks on INT 16/AH=10h,11h,12h
  2450.  6    checks on INT 16/AH=20h,21h,22h
  2451.  7    reserved (0)
  2452. SeeAlso: #1907
  2453.  
  2454. Bitfields for AMIS shift states:
  2455. Bit(s)    Description    (Table 1909)
  2456.  0    right shift pressed
  2457.  1    left shift pressed
  2458.  2    either control key pressed
  2459.  3    either Alt key pressed
  2460.  4    ScrollLock active
  2461.  5    NumLock active
  2462.  6    CapsLock active
  2463.  7    either shift key pressed
  2464.  8    left control key pressed
  2465.  9    left Alt key pressed
  2466.  10    right control key pressed
  2467.  11    right Alt key pressed
  2468.  12    ScrollLock pressed
  2469.  13    NumLock pressed
  2470.  14    CapsLock pressed
  2471.  15    SysReq key pressed
  2472. Notes:    if bit 2 is set, either control key may be pressed for the hotkey; if
  2473.       bits 8 and 10 are both set, then both control keys must be pressed.
  2474.       Similarly for bits 3 and 9/11, as well as 7 and 0/1.
  2475.     the SysReq key is often labeled SysRq
  2476. SeeAlso: #1907,#1910
  2477.  
  2478. Bitfields for AMIS hotkey flags:
  2479. Bit(s)    Description    (Table 1910)
  2480.  0    hotkey chained before processing
  2481.  1    hotkey chained after processing
  2482.  2    others should pass through this hotkey so that it can be monitored
  2483.  3    hotkey will not activate if other keys pressed/released before hotkey
  2484.       press is completed
  2485.  4    this key is remapped into some other key
  2486.  5    this key is conditionally chained (sometimes passed on, sometimes
  2487.       swallowed)
  2488.  6-7    reserved (0)
  2489. SeeAlso: #1907,#1909
  2490. --------t-2D--06-----------------------------
  2491. INT 2D - AMIS v3.6 - GET DEVICE-DRIVER INFORMATION
  2492.     AL = 06h
  2493.     AH = multiplex number for program
  2494. Return: AL = number of device driver headers supplied by prog.
  2495.     AH = device-driver flags (see #1911)
  2496.     DX:BX -> first device driver header (see #0987)
  2497. Program: AMIS is the Alternate Multiplex Interrupt Specification promulgated
  2498.       by Ralf Brown
  2499. Notes:    if AL=00h, AH,BX,DX are meaningless and may be destroyed
  2500.     this function is not valid unless a program is installed on the
  2501.       specified multiplex number; use INT 2D/AL=00h to check
  2502.     programs which provide device drivers are required to support this
  2503.       function to be considered fully compliant with v3.6+ of the
  2504.       specification
  2505. SeeAlso: INT 2D/AL=00h,INT 2D/AL=01h,INT 2D/AL=02h,INT 2D/AL=03h,INT 2D/AL=04h
  2506. SeeAlso: INT 2D/AL=05h
  2507.  
  2508. Bitfields for AMIS device-driver information flags:
  2509. Bit(s)    Description    (Table 1911)
  2510.  0    program loaded from CONFIG.SYS, and thus can not be removed from memory
  2511.     (leave clear if unable to determine)
  2512.  1    device driver headers have not been linked into DOS device chain
  2513.  2    reentrant device driver(s)
  2514. --------N-2D--10-----------------------------
  2515. INT 2D - RATSR 2.0+ - GET STATUS
  2516.     AL = 10h
  2517.     AH = AMIS multiplex number for RATSR
  2518. Return: AL = status
  2519.         01h listening (no connection)
  2520.         02h receiving          \
  2521.         03h sending               > station being monitored
  2522.         04h initializing receive  /
  2523.     AH = keyboard lock status (00h unlocked, 01h locked)
  2524. Program: RATSR is a utility by James Berry provided with
  2525.       RemoteAccess/Professional, a commercial bulletin board system, that
  2526.       allows remote control of a station over a network
  2527. SeeAlso: INT 2D"AMIS"
  2528. --------d-2D--10-----------------------------
  2529. INT 2D - dLite 1.0+ - GET PARAMETER BLOCK ADDRESS
  2530.     AL = 10h
  2531.     AH = AMIS multiplex number for dLite
  2532. Return: CF clear if successful
  2533.         ES:BX -> parameter block (see #1912)
  2534.     CF set on error
  2535. Program: dLite is a shareware TSR by Rainer Schuetze which transparently
  2536.       expands compressed files when they are read
  2537. SeeAlso: AL=11h"dLite",AL=12h"dLite",INT 21/AX=FEDCh"PCMANAGE"
  2538.  
  2539. Format of dLite parameter block:
  2540. Offset    Size    Description    (Table 1912)
  2541.  00h    BYTE    TSR flags (see #1913)
  2542.  01h    WORD    maximum number of programs needing original filesize
  2543.  03h    WORD    current number of programs needing original filesize
  2544.  05h    WORD    maximum number of files that can be handled by dLite (should
  2545.           be the same as FILES= in CONFIG.SYS)
  2546.  07h    WORD    offset (in the same segment as the parameter block) of the
  2547.           table of programs needing the original filesize (8 bytes
  2548.           each,    without path or extension, uppercase, and zero \
  2549.           terminated if    shorter than 8 bytes)
  2550.  
  2551. Bitfields for dLite TSR flags:
  2552. Bit(s)    Description    (Table 1913)
  2553.  0    deny FCB access
  2554.  1    dLite sleeping rather than activated
  2555.  2    always indicate original filesize when reading directory entries,
  2556.       rather than only for specified programs
  2557.  3-7    reserved
  2558. SeeAlso: #1912
  2559. --------V-2D--10-----------------------------
  2560. INT 2D - Burnout Plus v3.00 - GET STATE/CONTROL INFORMATION
  2561.     AL = 10h
  2562.     AH = AMIS multiplex number for Burnout Plus
  2563. Return: AL = 01h
  2564.     BX = Burnout Plus status (see #1914)
  2565.     CX = record of features loaded (see #1915)
  2566.     ES:DI -> Burnout Plus control structure (see #1916)
  2567. Program: Burnout Plus is a DOS screen saver from Cove Software
  2568. SeeAlso: INT 14/AX=AA01h,INT 2D"AMIS"
  2569. Index:    screen saver;Burnout Plus
  2570.  
  2571. Bitfields for Burnout Plus status:
  2572. Bit(s)    Description    (Table 1914)
  2573.  0    screen is blanked
  2574.  1    MS Windows is active (Burnout Plus deactivated)
  2575.  2-15    reserved
  2576.  
  2577. Bitfields for Burnout Plus features loaded/features enabled:
  2578. Bit(s)    Description    (Table 1915)
  2579.  0    mouse activity monitor
  2580.  1    passkey support
  2581.  2    password support
  2582.  3    continuous clear
  2583.  4    software blanking
  2584.  5    video activity monitor
  2585.  6    disk activity monitor
  2586.  7    activating keystroke suppression
  2587. SeeAlso: #1916
  2588.  
  2589. Format of Burnout Plus control structure:
  2590. Offset    Size    Description    (Table 1916)
  2591.  00h    BYTE    size of structure in bytes
  2592.  01h    WORD    Burnout Plus version
  2593.  03h    WORD    screen blanking reset count in clock ticks
  2594.  05h    WORD    current countdown value in clock ticks
  2595.  07h    BYTE    type of timeout specification
  2596.  08h    BYTE    instant-blank hotkey
  2597.  09h    WORD    extended status information (see #1917)
  2598.         the bits for password, passkey, and software blanking are
  2599.           ignored and cannot be enabled or disabled externally
  2600.  0Bh    WORD    features enabled (see #1915)
  2601. Note:    all fields except the first two may be modified by external programs
  2602.       to affect the operation of Burnout Plus
  2603. Index:    hotkeys;Burnout Plus
  2604.  
  2605. Bitfields for extended Burnout Plus status information:
  2606. Bit(s)    Description    (Table 1917)
  2607.  0    Burnout Plus disabled
  2608.  1    force screen to blank on next clock tick
  2609.  2    restore screen if currently blanked
  2610.  3-15    reserved
  2611. Note:    1 and 2 are automatically cleared by Burnout Plus after blanking
  2612.       or restoring the screen
  2613. SeeAlso: #1916
  2614. --------V-2D--10-----------------------------
  2615. INT 2D U - Screen Thief v1.00 - FREE HIGH MEMORY BUFFERS
  2616.     AL = 10h
  2617.     AH = AMIS multiplex number for Screen Thief
  2618. Return: nothing
  2619. Program: Screen Thief is a graphics screen grabber
  2620. Note:    releases any code and data stored in EMS, DOS UMBs, or XMS UMBs, but
  2621.       does not release the low-memory stub; this may be used to effect a
  2622.       partial uninstall if INT 2D/AL=02h fails
  2623. SeeAlso: INT D8"Screen Thief"
  2624. --------i-2D--10-----------------------------
  2625. INT 2D U - RAMLIGHT v1.0 - GET MONITORING INFORMATION
  2626.     AL = 10h
  2627.     AH = AMIS multiplex number for RAMLIGHT
  2628. Return: ES:BX -> array of fake device driver headers used in monitoring
  2629.     CX = number of drives being monitored???
  2630. --------U-2D--10-----------------------------
  2631. INT 2D - DTown Utilities v1.40+ - EXTENDED API INSTALLATION CHECK
  2632.     AL = 10h
  2633. Return: AL = FFh
  2634.     BL = extended API availability (00h no, 01h API is loaded)
  2635. SeeAlso: INT 2D/AL=11h"DTown",INT 2D/AL=20h,INT 2D/AL=50h
  2636. --------s-2D--10-----------------------------
  2637. INT 2D - CDTSR - GET INTERNAL VARIABLE TABLE
  2638.     AL = 10h
  2639.     AH = AMIS multiplex number for CDTSR
  2640. Return: CX:DX -> CDTSR internal variable structure (see #1918)
  2641. Program: CDTSR is a resident audio CD player by Colin Hill
  2642. SeeAlso: INT 2D/AL=11h"CDTSR",INT 2D/AL=12h"CDTSR",INT 2D/AL=13h"CDTSR"
  2643.  
  2644. Format of CDTSR internal variable structure:
  2645. Offset    Size    Description    (Table 1918)
  2646.  00h    BYTE    hotkey scan code (see #0005)
  2647.  01h    BYTE    hotkey shift states
  2648.  02h    BYTE    flag: repeat
  2649.  03h    BYTE    flag: custom repeat
  2650.  04h    BYTE    flag: background polling
  2651.  05h    DWORD    (read-only) internal timing variable
  2652.  09h    DWORD    current track play position, in frames
  2653.  0Dh    DWORD    current disk play position, in frames
  2654.  11h    BYTE    number of entries in track program
  2655.  12h    BYTE    index into track program currently playing (FFh if not playing)
  2656.  13h 100 BYTEs    track program (each byte contains one track number)
  2657.  77h    BYTE    saved cursor end scan line
  2658.  78h    BYTE    saved cursor start scan line
  2659.  79h    BYTE    currently playing track
  2660.  7Ah    BYTE    CD driver media-change flag
  2661.  7Bh    WORD    video base segment during last popup
  2662.  7Dh    WORD    video page offset during last popup
  2663.  7Fh    BYTE    currently-selected track
  2664.  80h    DWORD    begin of custom repeat, in frames
  2665.  84h    DWORD    end of custom repeat, in frames
  2666.  88h    WORD    track program index of top list item
  2667. --------K-2D--10-----------------------------
  2668. INT 2D - KEYBIT Lite v5+ - GET POINTER TO STATUS BYTE
  2669.     AL = 10h
  2670.     AH = AMIS multiplex number for KEYBIT Lite
  2671. Return: DX:BX -> status byte (see #1919)
  2672. Program: KEYBIT Lite is an enhanced Italian keyboard driver by Pino Navato.
  2673. SeeAlso: INT 2D"AMIS"
  2674.  
  2675. Bitfields for KEYBIT Lite status byte:
  2676. Bit(s)    Description    (Table 1919)
  2677.  7    KEYBIT Lite active
  2678.  6    E-mail support active
  2679.  5-0    reserved
  2680. Notes:    E-mail support is one of the original features of KEYBIT Lite.    It is
  2681.       the automatic conversion of the 8-bits ASCII chars produced by some
  2682.       keys available on Italian keyboards to couples of 7-bits chars.
  2683.     Message editors should always enable e-mail support, they should also
  2684.       restore its original status before exiting.
  2685.     The user can change both status bits by hotkeys.
  2686. --------K-2D--10-----------------------------
  2687. INT 2D - ALTMENU - GET POINTER TO KEY CODE
  2688.     AL = 10h
  2689.     AH = AMIS multiplex number for signature 'Pino Nav' 'ALTMENU '
  2690. Return: DX:BX -> WORD key code to insert in keyboard buffer on Alt-key tap
  2691. Program: Pino Navato's freeware ALTMENU permits activating the menu bar of
  2692.       any program by pressing the Alt key alone.
  2693. Notes:    The value in the key code word will be returned in AX by a call to
  2694.       INT 16/AH=00h after the Alt key is pressed by itself
  2695.     ALTMENU may be disabled by setting the key code equal to 0000h
  2696. SeeAlso: INT 16/AH=00h,INT 2D"AMIS"
  2697. --------d-2D--11-----------------------------
  2698. INT 2D - dLite 1.0+ - CHECK FOR dPressed FILE AND GET ORIGINAL SIZE
  2699.     AL = 11h
  2700.     AH = AMIS multiplex number for dLite
  2701.     BX = file handle
  2702. Return: CF clear if successful
  2703.         DX:AX = size of uncompressed file
  2704.     CF set on error (not dPressed file)
  2705. SeeAlso: AL=10h"dLite",AL=12h"dLite"
  2706. --------U-2D--11-----------------------------
  2707. INT 2D - DTown Utilities v1.40+ - UTILITY INSTALLATION CHECK
  2708.     AL = 11h
  2709.     BL = function
  2710.         00h get number of installed utilities
  2711.         Return: BL = number of utilities
  2712.         01h get installed utilities
  2713.         DX:DI -> buffer containing one byte for each utility
  2714.         Return: DX:DI buffer filled with flags (0=no,1=yes) indicating
  2715.               whether the corresponding utility is loaded
  2716. Return: AL = FFh if supported
  2717. Note:    this function is only available if the extended API has been installed
  2718.       in the resident portion
  2719. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=20h
  2720. --------s-2D--11-----------------------------
  2721. INT 2D - CDTSR - REPROGRAM CDTSR
  2722.     AL = 11h
  2723.     AH = AMIS multiplex number for CDTSR
  2724. Return: nothing
  2725. Program: CDTSR is a resident audio CD player by Colin Hill
  2726. Desc:    reprograms CDTSR based on the values in the internal variable
  2727.       structure (see #1918), which may have been changed by an application
  2728. SeeAlso: INT 2D/AL=10h"CDTSR",INT 2D/AL=12h"CDTSR",INT 2D/AL=13h"CDTSR"
  2729. --------d-2D--12-----------------------------
  2730. INT 2D - dLite 1.0+ - CHECK FOR dPressed FILE AND GET COMPRESSED SIZE
  2731.     AL = 12h
  2732.     AH = AMIS multiplex number for dLite
  2733.     BX = file handle
  2734. Return: CF clear if successful
  2735.         DX:AX = size of compressed file
  2736.     CF set on error (not dPressed file)
  2737. SeeAlso: AL=10h"dLite",AL=11h"dLite"
  2738. --------s-2D--12-----------------------------
  2739. INT 2D - CDTSR - DISABLE POPUP
  2740.     AL = 12h
  2741.     AH = AMIS multiplex number for CDTSR
  2742. Return: nothing
  2743. SeeAlso: INT 2D/AL=10h"CDTSR",INT 2D/AL=11h"CDTSR",INT 2D/AL=13h"CDTSR"
  2744. --------U-2D--12-----------------------------
  2745. INT 2D - FREEVER - GET ORIGINAL DOS VERSION INFO
  2746.     AL = 12h
  2747.     AH = AMIS multiplex number for FREEVER
  2748. Return: AL = FFh if successful
  2749.         BH = major DOS version
  2750.         BL = minor DOS version
  2751.         CH = DOS version flag
  2752.         CL = OEM number
  2753.         DH = major DR DOS version number (FFh if unknown)
  2754.         DL = minor DR DOS version number (FFh if unknown)
  2755. Program: FREEVER is an AMIS-conformant freeware DOS version-faking TSR similar
  2756.       to SETVER for any DOS-compatible OS, written by Matthias Paul
  2757. SeeAlso: INT 2D/AL=13h"FREEVER",INT 2D/AL=14h"FREEVER",INT 2D/AL=17h"FREEVER"
  2758. --------s-2D--13-----------------------------
  2759. INT 2D - CDTSR - ENABLE POPUP
  2760.     AL = 13h
  2761.     AH = AMIS multiplex number for CDTSR
  2762. Return: nothing
  2763. Program: CDTSR is a resident audio CD player by Colin Hill
  2764. SeeAlso: INT 2D/AL=10h"CDTSR",INT 2D/AL=11h"CDTSR",INT 2D/AL=12h"CDTSR"
  2765. --------U-2D--13-----------------------------
  2766. INT 2D - FREEVER - SET VERSION NUMBERS
  2767.     AL = 13h
  2768.     AH = AMIS multiplex number for FREEVER
  2769.     BH = new major DOS version
  2770.     BL = new minor DOS version
  2771.     CH = new DOS version flag
  2772.     CL = new DOS revision number
  2773.     DH = new OEM number
  2774. SeeAlso: INT 2D/AL=12h"FREEVER",INT 2D/AL=15h"FREEVER",INT 2D/AL=17h"FREEVER"
  2775. --------U-2D--14-----------------------------
  2776. INT 2D - FREEVER - ENABLE TSR
  2777.     AL = 14h
  2778.     AH = AMIS multiplex number for FREEVER
  2779. Return: AL = FFh if successful
  2780. SeeAlso: INT 2D/AL=12h"FREEVER",INT 2D/AL=15h"FREEVER",INT 2D/AL=16h"FREEVER"
  2781. --------U-2D--15-----------------------------
  2782. INT 2D - FREEVER - DISABLE TSR
  2783.     AL = 15h
  2784.     AH = AMIS multiplex number for FREEVER
  2785. Return: AL = FFh if successful
  2786. SeeAlso: INT 2D/AL=12h"FREEVER",INT 2D/AL=14h"FREEVER",INT 2D/AL=16h"FREEVER"
  2787. --------U-2D--16-----------------------------
  2788. INT 2D - FREEVER - GET TSR STATUS
  2789.     AL = 16h
  2790.     AH = AMIS multiplex number for FREEVER
  2791. Return: AL = FFh if successful
  2792.         BL = status
  2793.         01h resident and active
  2794.         02h resident and inactive
  2795. SeeAlso: INT 2D/AL=12h"FREEVER",INT 2D/AL=15h"FREEVER",INT 2D/AL=17h"FREEVER"
  2796. --------U-2D--17-----------------------------
  2797. INT 2D - FREEVER - GET TaskMAX STATUS AT INSTALLATION
  2798.     AL = 17h
  2799.     AH = AMIS multiplex number for FREEVER
  2800. Return: AL = FFh if successful
  2801.         BL = status
  2802.         00h if TaskMAX not loaded before SETDRVER
  2803.         FFh if TaskMAX was loaded before SETDRVER
  2804. Program: FREEVER is an AMIS-conformant freeware DOS version-faking TSR similar
  2805.       to SETVER for any DOS-compatible OS, written by Matthias Paul
  2806. SeeAlso: INT 2D/AL=12h"FREEVER",INT 2D/AL=14h"FREEVER",INT 2D/AL=16h"FREEVER"
  2807. --------U-2D--20-----------------------------
  2808. INT 2D - DTown Utilities v1.40+ - GET POP-UP HANDLER ADDRESS
  2809.     AL = 20h
  2810. Return: AL = FFh if available
  2811.         DX:DI -> DTU popup-handler
  2812. Program: DTown Utilities is a freeware programmer's utility TSR by Jeroen van
  2813.       Disseldorp
  2814. Note:    this function is only available if the extended API has been installed
  2815.       in the resident portion
  2816. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=21h,INT 2D/AL=50h,INT 2D/AL=51h
  2817. SeeAlso: INT 03"DTown"
  2818. --------U-2D--21-----------------------------
  2819. INT 2D - DTown Utilities v1.40+ - POP UP
  2820.     AL = 21h
  2821.     BL = which utility to bring up
  2822.         00h active utility
  2823.         01h help screen
  2824.         0Ah ASCII table
  2825.         0Bh memory view
  2826.         0Ch CPU status
  2827.         0Dh calculator
  2828.         0Eh miscellaneous
  2829.         0Fh file viewer
  2830.         10h disassembler
  2831. Return: AL = status
  2832.         00h already active
  2833.         FFh popped up successfully
  2834.     BX = 0000h
  2835. Note:    this function is only available if the extended API has been installed
  2836.       in the resident portion
  2837. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=20h,INT 2D/AL=50h
  2838. --------U-2D--50-----------------------------
  2839. INT 2D - DTown Utilities v1.40+ - MEMORY VIEW SET ADDRESS
  2840.     AL = 50h
  2841.     CX:DX = new address for start of memory view utility's display
  2842. Note:    this function is only available if the extended API has been installed
  2843.       in the resident portion
  2844. Return: AL = FFh if supported
  2845. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=20h,INT 2D/AL=21h,INT 2D/AL=51h
  2846. --------U-2D--51-----------------------------
  2847. INT 2D - DTown Utilities v1.40+ - MEMORY VIEW SET REFERENCE
  2848.     AL = 51h
  2849.     BL = reference ("bookmark") number
  2850.     CX:DX = new address for reference
  2851. Return: AL = status
  2852.         00h invalid index
  2853.         FFh reference set
  2854. Note:    this function is only available if the extended API has been installed
  2855.       in the resident portion
  2856. Program: DTown Utilities is a shareware programmer's utility TSR by Jeroen van
  2857.       Disseldorp
  2858. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=20h,INT 2D/AL=50h
  2859. --------b-2D--DC-----------------------------
  2860. INT 2D C - DAISY.SYS - BROADCAST: CHAIN RESCANNED
  2861.     AL = DCh
  2862.     AH = AMIS multiplex number for signature 'DAISYCHA' 'INDRIVER'
  2863.     DL = LPT Port Rescanned
  2864. Program: DAISY.SYS is a daisy chain manager for parallel port peripherals
  2865.       conforming to the IEEE 1284.3 Committee's daisy chain specification.
  2866. Desc:    This Broadcast is sent whenever daisy chain IDs are reassigned to
  2867.       warn parallel port device drivers that their daisy chain ID may
  2868.       have been changed.
  2869. Note:    This function is a callout from DAISY.SYS, NOT a call into DAISY.SYS
  2870. SeeAlso: INT 17/AX=0200h"Enhanced Parallel Port",#0530,#1905
  2871. --------l-2E---------------------------------
  2872. INT 2E U - DOS 2+ - PASS COMMAND TO COMMAND INTERPRETER FOR EXECUTION
  2873.     DS:SI -> commandline to execute (see #1920)
  2874. Return: all registers except CS:IP destroyed
  2875.     AX = status (4DOS v4.0)
  2876.        0000h successful
  2877.        FFFFh error before processing command (not enough memory, etc)
  2878.        other error number returned by command
  2879. Notes:    this call allows execution of arbitrary commands (including COMMAND.COM
  2880.       internal commands) without loading another copy of COMMAND.COM
  2881.     if COMMAND.COM is the user's command interpreter, the primary copy
  2882.       executes the command; this allows the master environment to be
  2883.       modified by issuing a "SET" command, but changes in the master
  2884.       environment will not become effective until all programs descended
  2885.       from the primary COMMAND.COM terminate
  2886.     since COMMAND.COM processes the string as if typed from the keyboard,
  2887.       the transient portion needs to be present, and the calling program
  2888.       must ensure that sufficient memory to load the transient portion can
  2889.       be allocated by DOS if necessary
  2890.     results are unpredictable if invoked by a program run from a batch file
  2891.       because this call is not reentrant and COMMAND.COM uses the same
  2892.       internal variables when processing a batch file
  2893.     hooked but ignored by 4DOS v3.0 COMMAND.COM replacement unless SHELL2E
  2894.       has been loaded
  2895.     the MS-DOS 5 Programmer's Reference calls this "Reload Transient"
  2896.  
  2897. Format of DOS commandline:
  2898. Offset    Size    Description    (Table 1920)
  2899.  00h    BYTE    length of command string, not counting trailing CR
  2900.  01h    var    command string
  2901.   N    BYTE    0Dh (CR)
  2902. --------O-2E---------------------------------
  2903. INT 2E UP - Windows NT - NATIVE API
  2904.     EAX = function number
  2905.     EDX = address of parameter block
  2906. Return: ???
  2907. --------l-2E----BXE22E-----------------------
  2908. INT 2E - 4DOS v2.x-3.03 SHELL2E.COM - UNINSTALL
  2909.     BX = E22Eh
  2910.     DS:SI -> zero byte
  2911. Return: if successful, SHELL2E terminates itself with INT 21/AH=4Ch
  2912. ----------2F---------------------------------
  2913. INT 2F - Multiplex - NOTES
  2914.     AH = identifier of program which is to handle the interrupt
  2915.        00h-7Fh reserved for DOS
  2916.        B8h-BFh reserved for networks
  2917.        C0h-FFh reserved for applications
  2918.     AL is the function code
  2919.    This is a general mechanism for verifying the presence of a TSR and
  2920.    communicating with it.  When searching for a free identifier code for AH
  2921.    using the installation check (AL=00h), the calling program should set
  2922.    BX/CX/DX to 0000h and must not depend on any registers other than CS:IP
  2923.    and SS:SP to be valid on return, since numerous programs now use additional
  2924.    registers on input and/or output for the installation check.
  2925. Notes:    Since the multiplex chain is growing so long, and beginning to
  2926.       experience multiplex number collisions, I have proposed an alternate
  2927.       multiplex interrupt on INT 2D.  If you decide to use the alternate
  2928.       multiplex, please let me know.
  2929.     DOS and some other programs return values in the flags register, so
  2930.       any TSR which chains by calling the previous handler rather than
  2931.       jumping to it should ensure that the returned flags are preserved
  2932.       and passed back to the original caller
  2933. SeeAlso: INT 2D"ALTERNATE MULTIPLEX"
  2934. --------t-2F---------------------------------
  2935. INT 2F - BMB Compuscience Canada Utilities Interface - INSTALLATION CHECK
  2936.     AH = xx (dynamically assigned based upon a search for a multiplex
  2937.          number which doesn't answer installed)
  2938.     AL = 00h installation check
  2939.     ES:DI = EBEBh:BEBEh
  2940. Return: AL = 00h not installed
  2941.          01h not installed, not OK to install
  2942.          FFh installed; if ES:DI was EBEBh:BEBEh on entry, ES:DI will point
  2943.          to a string of the form 'MMMMPPPPPPPPvNNNN' where MMMM is a
  2944.          short form of the manufacturer's name, PPPPPPPP is a product
  2945.          name and NNNN is the product's version number
  2946. --------t-2F---------------------------------
  2947. INT 2F - Ross Wentworth's Turbo Pascal POPUP LIBRARY
  2948.     AH = programmer-selected multiplex number
  2949.     AL = function
  2950.         00h installation check
  2951.         Return: AL = FFh if installed
  2952.         01h get TSR interrupt vectors
  2953.         Return: DX:AX -> vector table (see #1921)
  2954.         02h get TSR code segment
  2955.         Return: AX = code segment for all interrupt handlers
  2956.         03h call user exit routine and release TSR's memory
  2957.         04h get signature string
  2958.         Return: DX:AX -> counted string containing signature
  2959.         05h get TSR's INT 2F handler
  2960.         Return: DX:AX -> INT 2F handler
  2961.         06h enable/disable TSR
  2962.         BL = new state (00h disabled, 01h enabled)
  2963.         07h activate TSR (popup if not disabled)
  2964.         08h get hotkeys
  2965.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  2966.         Return: AX = hotkey (AH = keyflags, AL = scancode)
  2967.         09h set hotkey
  2968.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  2969.         CX = new hotkey (CH = keyflags, CL = scancode)
  2970.         0Ah-1Fh reserved
  2971. Index:    installation check;Ross Wentworth POPUP library
  2972. Index:    hotkeys;Ross Wentworth POPUP library
  2973.  
  2974. Format of POPUP vector table entry:
  2975. Offset    Size    Description    (Table 1921)
  2976.  00h    BYTE    vector number (00h = end of table)
  2977.  01h    DWORD    original vector
  2978.  05h    WORD    offset of interrupt handler in TSR's code segment
  2979. --------t-2F---------------------------------
  2980. INT 2F - CiriSOFT Spanish University of Valladolid TSR's Interface
  2981.     AH = xx (dynamically assigned based upon a search for a multiplex
  2982.          number from C0h to FFh which doesn't answer installed)
  2983.     AL = 00h installation check
  2984.     ES:DI = 1492h:1992h
  2985. Return: AL = 00h not installed
  2986.          01h not installed, not OK to install
  2987.          FFh installed; and if ES:DI was 1492h:1992h on entry, ES:DI will
  2988.            point to author_name_ver table (see #1922)
  2989.     AH = FFh
  2990. Note:    this interface permits advanced communication with TSRs: it is possible
  2991.       to make a generic uninstall utility, advanced TSR relocator programs
  2992.       in order to fit fragmented memory areas, etc.
  2993. See also: INT 2D"AMIS",INT 2F"Compuscience"
  2994. Index:    installation check;CiriSOFT TSR interface
  2995. Index:    uninstall;CiriSOFT TSR interface
  2996.  
  2997. Format of CiriSOFT author_name_ver table:
  2998. Offset    Size    Description    (Table 1922)
  2999.  -16    WORD    segment of the start of the resident TSR code (CS in programs
  3000.           with PSP, XMS upper memory segment if installed as UMB...)
  3001.  -14    WORD    offset of the start of the resident TSR code (frequently 100h
  3002.           in *.COM programs and 0 in upper memory TSR's).
  3003.  -12    WORD    memory used by TSR (in paragraphs). Knowing the memory area
  3004.           used by TSR is possible to determine if hooked vectors are
  3005.           still pointing it (and if it is safe to uninstall).
  3006.  -10    BYTE    characteristics byte (see #1923)
  3007.  -9    BYTE    number of multiplex entry used (redefinition available). Note
  3008.           that the TSR must use THIS variable in it's INT 2Fh handler.
  3009.  -8    WORD    offset to vector_area table (see #1924)
  3010.  -6    WORD    offset to extra_area table (see #1925,#1923 [bit 7])
  3011.  -4   4 BYTEs    signature string "*##*"
  3012.  00h    var    "AUTHOR:PROGRAM_NAME:VERSION",0     (variable length, this area
  3013.           is used in order to determine if the TSR is already resident
  3014.           and it's version code; the ':' char is used as delimiter)
  3015.  
  3016. Bitfields for CiriSOFT characteristics byte:
  3017. Bit(s)    Description    (Table 1923)
  3018.  0-2    type
  3019.     000 normal program (with PSP)
  3020.     001 upper XMS memory block (needed HIMEM.SYS function to free memory
  3021.           when uninstalling)
  3022.     010 device driver (*.SYS)
  3023.     011 device driver in EXE format
  3024.     1xx others (reserved)
  3025.  3-6    reserved
  3026.  7    set if extra_table defined and supported (see #1925)
  3027. SeeAlso: #1922
  3028.  
  3029. Format of CiriSOFT vector_area table:
  3030. Offset    Size    Description    (Table 1924)
  3031.  -1    BYTE    number of vectors intercepted by TSR
  3032.  00h    BYTE    first vector number
  3033.  01h    DWORD    first vector pointer before installing the TSR
  3034.  05h    BYTE    second vector number
  3035.  06h    DWORD    second vector pointer before installing the TSR
  3036.  0Ah    ...    (and so on)
  3037. Note:    the TSR must use these variables to invoke the previous interrupt
  3038.       handler routines
  3039. SeeAlso: #1922
  3040.  
  3041. Format of extra_area table (needed only to improve relocation feature):
  3042. Offset    Size    Description    (Table 1925)
  3043.  00h    WORD    offset to external_ctrl table (see #1926)
  3044.         0000h if not supported
  3045.  02h    WORD    reserved for future use (0)
  3046. SeeAlso: #1922
  3047.  
  3048. Format of CiriSOFT external_ctrl table:
  3049. Offset    Size    Description    (Table 1926)
  3050.  00h    BYTE    bit 0: TSR is relocatable (no absolute segment references)
  3051.  01h    WORD    offset to a variable which can activate/inhibit the TSR
  3052.  ---And if bit 0 in offset 00h is off:
  3053.  03h    DWORD    pointer to ASCIZ pathname for executable file which supports
  3054.           /SR parameter (silent installation & inhibit)
  3055.  07h    DWORD    pointer to first variable to initialize on the copy reloaded
  3056.           from the previous TSR still resident
  3057.  0Bh    DWORD    pointer to last variable (all variables packed in one block)
  3058. --------c-2F00-------------------------------
  3059. INT 2F U - DOS 2.x only PRINT.COM - ???
  3060.     AH = 00h
  3061.     ???
  3062. Return: ???
  3063. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  3064.     values in AH other than 00h or 01h cause PRINT to return the number of
  3065.       files in the queue in AH
  3066. SeeAlso: AH=01h
  3067. --------P-2F00-------------------------------
  3068. INT 2F U - PSPRINT - PRINT JOB CONTROL
  3069.     AH = 00h
  3070.     ???
  3071. Return: ???
  3072. --------c-2F0080-----------------------------
  3073. INT 2F - DOS 3.1+ PRINT - GIVE PRINT A TIME SLICE
  3074.     AX = 0080h
  3075. Return: after PRINT executes
  3076. Notes:    PRINT returns AL=01h if AH=00h but AL is not 80h on entry
  3077.     this function is not supported by the Novell DOS 7 PRINT.COM
  3078. --------N-2F00D8-----------------------------
  3079. INT 2F - Personal NetWare - VLM - ???
  3080.     AX = 00D8h
  3081.     ???
  3082. Return: ???
  3083. Note:    hooked by one of the .VLMs loaded by VLM.EXE v1.10, but apparently a
  3084.       NOP
  3085. --------c-2F01-------------------------------
  3086. INT 2F U - DOS 2.x only PRINT.COM - ???
  3087.     AH = 01h
  3088.     ???
  3089. Return: ???
  3090. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  3091.     values in AH other than 00h or 01h cause PRINT to return the number of
  3092.       files in the queue in AH
  3093. SeeAlso: AH=00h
  3094. --------c-2F0100-----------------------------
  3095. INT 2F - DOS 3.0+ PRINT - INSTALLATION CHECK
  3096.     AX = 0100h
  3097. Return: AL = status
  3098.         00h not installed
  3099.         01h not installed, but not OK to install
  3100.         FFh installed
  3101.         AH = 00h (Novell DOS 7)
  3102. SeeAlso: AX=0101h
  3103. --------c-2F0100SI20D6-----------------------
  3104. INT 2F U - PrintCache 3.1 PRINT.COM - INSTALLATION CHECK
  3105.     AX = 0100h
  3106.     SI = 20D6h
  3107.     DI = 8761h
  3108. Return: AX = 00FFh if installed
  3109.     DI = 0001h if PrintCache's PRINT.COM installed and magic values match
  3110.         SI = resident code segment
  3111. Program: PrintCache PRINT.COM is a DOS PRINT replacement included in
  3112.       LaserTools' PrintCache memory/disk-based print spooler package
  3113. Note:    if either of SI or DI differ from the indicated magic values, only AX
  3114.       will be modified on return, for compatibility with DOS PRINT
  3115. SeeAlso: AX=0101h/SI=20D6h,AX=C000h"PCACHE"
  3116. --------c-2F0101-----------------------------
  3117. INT 2F - DOS 3.0+ PRINT - SUBMIT FILE FOR PRINTING
  3118.     AX = 0101h
  3119.     DS:DX -> submit packet (see #1927)
  3120. Return: CF clear if successful
  3121.         AL = status
  3122.         01h added to queue
  3123.         9Eh now printing
  3124.     CF set on error
  3125.         AX = error code (see #1928,#1020 at INT 21/AH=59h/BX=0000h)
  3126. SeeAlso: AX=0102h
  3127.  
  3128. Format of PRINT submit packet:
  3129. Offset    Size    Description    (Table 1927)
  3130.  00h    BYTE    level (must be 00h)
  3131.  01h    DWORD    pointer to ASCIZ filename (no wildcards)
  3132.  
  3133. (Table 1928)
  3134. Values for PRINT error code:
  3135.  0001h    invalid function
  3136.  0002h    file not found
  3137.  0003h    path not found
  3138.  0004h    out of file handles
  3139.  0005h    access denied
  3140.  0008h    print queue full
  3141.  0009h    spooler busy
  3142.  000Ch    name too long
  3143.  000Fh    invalid drive
  3144. --------c-2F0101SI20D6-----------------------
  3145. INT 2F U - PrintCache v3.1 PRINT.COM - SUBMIT FILE FOR PRINTING
  3146.     AX = 0101h
  3147.     SI = 20D6h
  3148.     DI = 8761h
  3149.     DS:DX -> submit packet (see #1927)
  3150.     CL = print options
  3151.         bit 4: use default options
  3152. Return: CF clear if successful
  3153.         AL = status
  3154.         01h added to queue
  3155.         9Eh now printing
  3156.     CF set on error
  3157.         AX = error code (see #1928)
  3158. Program: PrintCache PRINT.COM is a DOS PRINT replacement included in
  3159.       LaserTools' PrintCache memory/disk-based print spooler package
  3160. Note:    if either SI or DI differs from the indicated magic values on entry,
  3161.       PrintCache will use the default print options for the file for
  3162.       compatibility with DOS PRINT
  3163. SeeAlso: AX=0100h/SI=20D6h,AX=0101h,AX=0107h"PrintCache"
  3164. --------c-2F0102-----------------------------
  3165. INT 2F - DOS 3.0+ PRINT - REMOVE FILE FROM PRINT QUEUE
  3166.     AX = 0102h
  3167.     DS:DX -> ASCIZ filename (wildcards allowed)
  3168. Return: CF clear if successful
  3169.     CF set on error
  3170.         AX = error code (see #1928)
  3171. SeeAlso: AX=0101h,AX=0103h
  3172. --------c-2F0103-----------------------------
  3173. INT 2F - DOS 3.0+ PRINT - CANCEL ALL FILES IN PRINT QUEUE
  3174.     AX = 0103h
  3175. Return: CF clear if successful
  3176.     CF set on error
  3177.         AX = error code (see #1928)
  3178. SeeAlso: AX=0102h
  3179. --------c-2F0104-----------------------------
  3180. INT 2F - DOS 3.0+ PRINT - FREEZE PRINT QUEUE TO READ JOB STATUS
  3181.     AX = 0104h
  3182. Return: CF clear if successful
  3183.         DX = error count since status last read
  3184.         DS:SI -> print queue
  3185.     CF set on error
  3186.         AX = error code (see #1928)
  3187. Desc:    get the list of print jobs, temporarily suspending PRINT's activities
  3188.       to avoid changing the list while it is being examined
  3189. Notes:    the print queue is an array of 64-byte ASCIZ filenames terminated by
  3190.       an empty filename; the first name is the file currently being printed
  3191.     printing is stopped until AX=0105h is called to prevent the queue
  3192.       from changing while the filenames are being read
  3193. SeeAlso: AX=0101h,AX=0105h
  3194. --------c-2F0105-----------------------------
  3195. INT 2F - DOS 3.0+ PRINT - RESTART PRINT QUEUE AFTER STATUS READ
  3196.     AX = 0105h
  3197. Return: CF clear if successful
  3198.     CF set on error
  3199.         AX = error code (see #1928)
  3200. Desc:    restart PRINT's activities once an application finishes examining the
  3201.       print queue
  3202. SeeAlso: AX=0104h
  3203. --------c-2F0106-----------------------------
  3204. INT 2F - DOS 3.3+ PRINT - GET PRINTER DEVICE
  3205.     AX = 0106h
  3206. Return: CF set if files in print queue
  3207.         AX = error code 0008h (queue full)
  3208.         DS:SI -> device driver header (see #0987)
  3209.     CF clear if print queue empty
  3210.         AX = 0000h
  3211. Desc:    determine which device, if any, PRINT is currently using for output
  3212. Notes:    undocumented prior to the release of MS-DOS 5.0
  3213.     this function can be used to allow a program to avoid printing to the
  3214.       printer on which PRINT is currently performing output
  3215. SeeAlso: AX=0104h
  3216. --------c-2F0107-----------------------------
  3217. INT 2F U - PrintCache v3.1 PRINT.COM - SET TRAILING FORM FEEDS
  3218.     AX = 0107h
  3219.     CL bit 0: output form feed between print jobs
  3220. Return: AL destroyed
  3221. SeeAlso: AX=0100h/SI=20D6h,AX=0101h/SI=20D6h
  3222. --------N-2F0200-----------------------------
  3223. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - INSTALLATION CHECK
  3224.     AX = 0200h
  3225. Return: AL = FFh if installed
  3226. Desc:    determine whether the PC LAN Program redirector is installed
  3227. SeeAlso: AX=0201h,AX=0203h
  3228. --------N-2F0201-----------------------------
  3229. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  3230.     AX = 0201h
  3231. Return: nothing???
  3232. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  3233.     AX=0202h appears to be the opposite function
  3234.     these functions are supposedly used to signal opening and closing of
  3235.       printers
  3236. SeeAlso: AX=0202h
  3237. --------N-2F0202-----------------------------
  3238. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  3239.     AX = 0202h
  3240.     ???
  3241. Return: nothing???
  3242. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  3243.     these functions are supposedly used to signal opening and closing of
  3244.       printers
  3245. SeeAlso: AX=0201h
  3246. --------N-2F0203-----------------------------
  3247. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  3248.     AX = 0203h
  3249. Return: nothing???
  3250. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  3251.     AX=0204h appears to be the opposite function
  3252.     these functions are supposedly used to signal opening and closing of
  3253.       printers
  3254. SeeAlso: AX=0200h,AX=0204h
  3255. --------N-2F0204-----------------------------
  3256. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  3257.     AX = 0204h
  3258.     ???
  3259. Return: nothing???
  3260. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  3261.     AX=0203h appears to be the opposite function
  3262.     these functions are supposedly used to signal opening and closing of
  3263.       printers
  3264. SeeAlso: AX=0200h,AX=0203h
  3265. --------N-2F---------------------------------
  3266. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  3267.     AX = 02xxh
  3268.     ???
  3269. Return: ???
  3270. --------l-2F0500-----------------------------
  3271. INT 2F U - DOS 3.0+ CRITICAL ERROR HANDLER - INSTALLATION CHECK
  3272.     AX = 0500h
  3273. Return: AL = 00h not installed, OK to install
  3274.          01h not installed, can't install
  3275.          FFh installed
  3276. Desc:    determine whether a critical error message override is installed
  3277. Note:    this set of functions allows a user program to partially or completely
  3278.       override the default critical error handler's message in COMMAND.COM
  3279. SeeAlso: AH=05h,INT 24
  3280. --------l-2F05-------------------------------
  3281. INT 2F CU - DOS 3.0+ CRITICAL ERROR HANDLER - EXPAND ERROR INTO STRING
  3282.     AH = 05h
  3283. ---DOS 3.x---
  3284.     AL = extended error code (not zero)
  3285. ---DOS 4.0+ ---
  3286.     AL = error type
  3287.         01h DOS extended error code
  3288.         02h parameter error
  3289.     BX = error code
  3290. Return: CF clear if successful
  3291.         ES:DI -> ASCIZ error message (read-only)
  3292.         AL = completion state
  3293.         00h message requires completion with device name, drive, etc.
  3294.         01h message is complete as returned
  3295.     CF set if error code can't be converted to string
  3296.         AX,DI,ES destroyed
  3297.     other flags corrupted
  3298. Notes:    called at start of COMMAND.COM's default critical error handler if
  3299.       installed by a user program, allowing partial or complete overriding
  3300.       of the default error messages
  3301.     subfunction 02h is called by many DOS 4 external programs
  3302.     DR DOS's COMMAND.COM appends additional info ("0 files copied") to the
  3303.       returned string
  3304. SeeAlso: AX=0500h,AX=122Eh,INT 24
  3305. --------U-2F0600-----------------------------
  3306. INT 2F - DOS 3.0+ ASSIGN - INSTALLATION CHECK
  3307.     AX = 0600h
  3308. Return: AL = status
  3309.         00h not installed
  3310.         01h not installed, but not OK to install
  3311.         FFh installed
  3312. Notes:    ASSIGN is not a TSR in DR DOS 5.0; it is internally replaced by SUBST
  3313.       (see INT 21/AH=52h)
  3314.     undocumented prior to the release of DOS 5.0
  3315. SeeAlso: AX=0601h,INT 21/AH=52h
  3316. --------U-2F0601-----------------------------
  3317. INT 2F U - DOS 3.0+ ASSIGN - GET DRIVE ASSIGNMENT TABLE
  3318.     AX = 0601h
  3319. Return: ES = segment of ASSIGN work area and assignment table
  3320. Note:    the 26 bytes starting at ES:0103h specify which drive each of A: to Z:
  3321.       is mapped to.     Initially set to 01h 02h 03h....
  3322. SeeAlso: AX=0600h,AX=AF14h"WinDOS"
  3323. --------D-2F0800-----------------------------
  3324. INT 2F U - DRIVER.SYS support - INSTALLATION CHECK
  3325.     AX = 0800h
  3326. Return: AL = status
  3327.         00h not installed, OK to install
  3328.         01h not installed, not OK to install
  3329.         FFh installed
  3330. Desc:    determine whether the internal support code used by DRIVER.SYS is
  3331.       present; it is always present in DOS 3.2+
  3332. Note:    supported by DR DOS 5.0 and Novell DOS 7
  3333. --------D-2F0801-----------------------------
  3334. INT 2F U - DRIVER.SYS support - ADD NEW BLOCK DEVICE
  3335.     AX = 0801h
  3336.     DS:DI -> drive data table (see #1935,#1936,#1937)
  3337. Return: AX,BX,SI,ES destroyed
  3338. Notes:    moves down internal list of drive data tables, copying and modifying
  3339.       the drive description flags word for tables referencing same physical
  3340.       drive
  3341.     the data table is appended to the chain of tables
  3342.     supported by DR DOS 5.0 and Novell DOS 7
  3343. SeeAlso: AX=0803h
  3344. --------D-2F0802-----------------------------
  3345. INT 2F U - DRIVER.SYS support - EXECUTE DEVICE DRIVER REQUEST
  3346.     AX = 0802h
  3347.     ES:BX -> device driver request header (see #1931)
  3348. Return: request header updated as per requested operation
  3349. Notes:    supported by DR DOS 5.0
  3350.     DOS 3.2 executes this function on any AL value from 02h through F7h;
  3351.       DOS 4.0+ executes this function on AL=02h and AL=04h-F7h
  3352.     the command codes (see #1929) and structures described below apply
  3353.       to all drivers which support the appropriate commands; this call is
  3354.       just one of a number of ways in which a device driver request may
  3355.       be invoked
  3356.     this call reportedly leaves one word on the stack under MS-DOS 6.2,
  3357.       so the stack pointer should be saved and restored around the call
  3358.       to this function
  3359.     supported by Novell DOS 7
  3360. SeeAlso: AX=0800h,AX=0801h,AX=0803h,AX=1510h,INT 21/AH=52h,INT 21/AH=99h
  3361. SeeAlso: INT 21/AH=9Ah
  3362.  
  3363. (Table 1929)
  3364. Values for device driver command code:
  3365.  00h    INIT
  3366.  01h    MEDIA CHECK (block devices)
  3367.  02h    BUILD BPB (block devices)
  3368.  03h    IOCTL INPUT
  3369.  04h    INPUT
  3370.  05h    NONDESTRUCTIVE INPUT, NO WAIT (character devices)
  3371.  06h    INPUT STATUS (character devices)
  3372.  07h    INPUT FLUSH (character devices)
  3373.  08h    OUTPUT
  3374.  09h    OUTPUT WITH VERIFY
  3375.  0Ah    OUTPUT STATUS (character devices)
  3376.  0Bh    OUTPUT FLUSH (character devices)
  3377.  0Ch    IOCTL OUTPUT
  3378.  0Dh    (DOS 3.0+) DEVICE OPEN
  3379.  0Eh    (DOS 3.0+) DEVICE CLOSE
  3380.  0Fh    (DOS 3.0+) REMOVABLE MEDIA (block devices)
  3381.  10h    (DOS 3.0+) OUTPUT UNTIL BUSY (character devices)
  3382.  11h    (European MS-DOS 4.0) STOP OUTPUT (console screen drivers only)
  3383.  12h    (European MS-DOS 4.0) RESTART OUTPUT (console screen drivers only)
  3384.  13h    (DOS 3.2+) GENERIC IOCTL
  3385.  14h    unused
  3386.  15h    (European MS-DOS 4.0) RESET UNCERTAIN MEDIA FLAG
  3387.  16h    unused
  3388.  17h    (DOS 3.2+) GET LOGICAL DEVICE
  3389.  18h    (DOS 3.2+) SET LOGICAL DEVICE
  3390.  19h    (DOS 5.0+) CHECK GENERIC IOCTL SUPPORT
  3391.  80h    (CD-ROM) READ LONG
  3392.  81h    (CD-ROM) reserved
  3393.  82h    (CD-ROM) READ LONG PREFETCH
  3394.  83h    (CD-ROM) SEEK
  3395.  84h    (CD-ROM) PLAY AUDIO
  3396.  85h    (CD-ROM) STOP AUDIO
  3397.  86h    (CD-ROM) WRITE LONG
  3398.  87h    (CD-ROM) WRITE LONG VERIFY
  3399.  88h    (CD-ROM) RESUME AUDIO
  3400.  
  3401. Bitfields for device request status:
  3402. Bit(s)    Description    (Table 1930)
  3403.  15    error
  3404.  14-11    reserved
  3405.  10    ??? set by DOS kernel on entry to some driver calls
  3406.  9    busy
  3407.  8    done (may be clear on return under European MS-DOS 4.0)
  3408.  7-0    error code if bit 15 set (see #1932)
  3409.  
  3410. Format of device driver request header:
  3411. Offset    Size    Description    (Table 1931)
  3412.  00h    BYTE    length of request header
  3413.  01h    BYTE    subunit within device driver
  3414.  02h    BYTE    command code (see #1929)
  3415.  03h    WORD    status (filled in by device driver) (see #1930)
  3416. ---DOS---
  3417.  05h  4 BYTEs    reserved (unused in DOS 2.x and 3.x)
  3418.  09h    DWORD    (European MS-DOS 4.0 only) pointer to next request header in
  3419.               device's request queue
  3420.         (other versions) reserved (unused in DOS 2.x and 3.x)
  3421. ---STARLITE architecture---
  3422.  05h    DWORD    pointer to next request header
  3423.  09h  4 BYTEs    reserved
  3424. ---command code 00h---
  3425.  0Dh    BYTE    (ret) number of units
  3426.  0Eh    DWORD    (call) pointer to DOS device helper function (see #1933)
  3427.               (European MS-DOS 4.0 only)
  3428.         (call) pointer past end of memory available to driver (DOS 5+)
  3429.         (ret) address of first free byte following driver
  3430.  12h    DWORD    (call) pointer to commandline arguments
  3431.         (ret) pointer to BPB array (block drivers) or
  3432.               0000h:0000h (character drivers)
  3433.  16h    BYTE    (DOS 3.0+) drive number for first unit of block driver (0=A)
  3434.    ---European MS-DOS 4.0---
  3435.  17h    DWORD    pointer to function to save registers on stack
  3436.    ---DOS 5+ ---
  3437.  17h    WORD    (ret) error-message flag
  3438.         0001h MS-DOS should display error msg on init failure
  3439. ---command code 01h---
  3440.  0Dh    BYTE    media descriptor
  3441.  0Eh    BYTE    (ret) media status
  3442.         00h don't know
  3443.         01h media has not changed
  3444.         FFh media has been changed
  3445.  0Fh    DWORD    (ret, DOS 3.0+) pointer to previous volume ID if the
  3446.           OPEN/CLOSE/RM bit in device header is set and disk changed
  3447. ---command code 02h---
  3448.  0Dh    BYTE    media descriptor
  3449.  0Eh    DWORD    transfer address
  3450.         -> scratch sector if NON-IBM FORMAT bit in device header set
  3451.         -> first FAT sector otherwise
  3452.  12h    DWORD    pointer to BPB (set by driver) (see #1004 at INT 21/AH=53h)
  3453. ---command codes 03h,0Ch---
  3454.           (see also INT 21/AX=4402h"DOS 2+",INT 21/AX=4403h"DOS")
  3455.  0Dh    BYTE    media descriptor (block devices only)
  3456.  0Eh    DWORD    transfer address
  3457.  12h    WORD    (call) number of bytes to read/write
  3458.         (ret) actual number of bytes read or written
  3459. ---command codes 04h,08h,09h (except Compaq DOS 3.31, DR DOS 6)---
  3460.  0Dh    BYTE    media descriptor (block devices only)
  3461.  0Eh    DWORD    transfer address
  3462.  12h    WORD    byte count (character devices) or sector count (block devices)
  3463.  14h    WORD    starting sector number (block devices only)
  3464.  16h    DWORD    (DOS 3.0+) pointer to volume ID if error 0Fh returned
  3465.  1Ah    DWORD    (DOS 4.0+) 32-bit starting sector number (block devices with
  3466.           device attribute word bit 1 set only) if starting sector
  3467.           number above is FFFFh (see INT 21/AH=52h)
  3468. ---command codes 04h,08h,09h (Compaq DOS 3.31, DR DOS 6)---
  3469.  0Dh    BYTE    media descriptor (block devices only)
  3470.  0Eh    DWORD    transfer address
  3471.  12h    WORD    byte count (character devices) or sector count (block devices)
  3472.  14h    DWORD    32-bit starting sector number (block devices only)
  3473.     Note:    to reliably determine which variant of the request block for
  3474.           functions 04h,08h,09h has been passed to the driver, check
  3475.           the length field as well as the word at offset 14h.  If the
  3476.           length is 1Eh and 14h=FFFFh, use the DWORD at 1Ah as the
  3477.           starting sector number; if the length is 18h, use the DWORD
  3478.           at 14h; otherwise, use the WORD at 14h.
  3479. ---command code 05h---
  3480.  0Dh    BYTE    byte read from device if BUSY bit clear on return
  3481. ---command codes 06h,07h,0Ah,0Bh,0Dh,0Eh,0Fh---
  3482.  no further fields
  3483. ---command code 10h---
  3484.  0Dh    BYTE    unused
  3485.  0Eh    DWORD    transfer address
  3486.  12h    WORD    (call) number of bytes to write
  3487.         (ret) actual number of bytes written
  3488. ---command codes 11h,12h---
  3489.  0Dh    BYTE    reserved
  3490. ---command code 15h---
  3491.  no further fields
  3492. ---command codes 13h,19h---
  3493.  0Dh    BYTE    category code
  3494.         00h unknown
  3495.         01h COMn:
  3496.         03h CON
  3497.         05h LPTn:
  3498.         07h mouse (European MS-DOS 4.0)
  3499.         08h disk
  3500.         9Eh (STARLITE) Media Access Control driver
  3501.  0Eh    BYTE    function code
  3502.         00h (STARLITE) MAC Bind request
  3503.  0Fh    WORD    copy of DS at time of IOCTL call (apparently unused in DOS 3.3)
  3504.         SI contents (European MS-DOS 4.0)
  3505.  11h    WORD    offset of device driver header (see #0987)
  3506.         DI contents (European MS-DOS 4.0)
  3507.  13h    DWORD    pointer to parameter block from INT 21/AX=440Ch or AX=440Dh
  3508. ---command codes 80h,82h---
  3509.  0Dh    BYTE    addressing mode
  3510.         00h HSG (default)
  3511.         01h Phillips/Sony Red Book
  3512.  0Eh    DWORD    transfer address (ignored for command 82h)
  3513.  12h    WORD    number of sectors to read
  3514.         (if 0 for command 82h, request is an advisory seek)
  3515.  14h    DWORD    starting sector number
  3516.         logical sector number in HSG mode
  3517.         frame/second/minute/unused in Red Book mode
  3518.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  3519.  18h    BYTE    data read mode
  3520.         00h cooked (2048 bytes per frame)
  3521.         01h raw (2352 bytes per frame, including EDC/ECC)
  3522.  19h    BYTE    interleave size (number of sectors stored consecutively)
  3523.  1Ah    BYTE    interleave skip factor
  3524.         (number of sectors between consecutive portions)
  3525. ---command code 83h---
  3526.  0Dh    BYTE    addressing mode
  3527.         00h HSG (default)
  3528.         01h Phillips/Sony Red Book
  3529.  0Eh    DWORD    transfer address (ignored)
  3530.  12h    WORD    number of sectors to read (ignored)
  3531.  14h    DWORD    starting sector number (see also above)
  3532. ---command code 84h---
  3533.  0Dh    BYTE    addressing mode
  3534.         00h HSG (default)
  3535.         01h Phillips/Sony Red Book
  3536.  0Eh    DWORD    starting sector number (see also above)
  3537.  12h    DWORD    number of sectors to play
  3538. ---command codes 85h,88h---
  3539.  no further fields
  3540. ---command codes 86h,87h---
  3541.  0Dh    BYTE    addressing mode
  3542.         00h HSG (default)
  3543.         01h Phillips/Sony Red Book
  3544.  0Eh    DWORD    transfer address (ignored in write mode 0)
  3545.  12h    WORD    number of sectors to write
  3546.  14h    DWORD    starting sector number (also see above)
  3547.  18h    BYTE    write mode
  3548.         00h mode 0 (write all zeros)
  3549.         01h mode 1 (default) (2048 bytes per sector)
  3550.         02h mode 2 form 1 (2048 bytes per sector)
  3551.         03h mode 2 form 2 (2336 bytes per sector)
  3552.  19h    BYTE    interleave size (number of sectors stored consecutively)
  3553.  1Ah    BYTE    interleave skip factor
  3554.         (number of sectors between consecutive portions)
  3555.  
  3556. (Table 1932)
  3557. Values for device driver error code:
  3558.  00h    write-protect violation
  3559.  01h    unknown unit
  3560.  02h    drive not ready
  3561.  03h    unknown command
  3562.  04h    CRC error
  3563.  05h    bad drive request structure length
  3564.  06h    seek error
  3565.  07h    unknown media
  3566.  08h    sector not found
  3567.  09h    printer out of paper
  3568.  0Ah    write fault
  3569.  0Bh    read fault
  3570.  0Ch    general failure
  3571.  0Dh    reserved
  3572.  0Eh    (CD-ROM) media unavailable
  3573.  0Fh    invalid disk change
  3574.  
  3575. (Table 1933)
  3576. Call European MS-DOS 4.0 device helper function with:
  3577.     DL = function
  3578.         00h "SchedClock" called on each timer tick
  3579.         AL = tick interval in milliseconds
  3580.         01h "DevDone" device I/O complete
  3581.         ES:BX -> request header
  3582.         Note:    must update status word first; may be called from
  3583.               an interrupt handler
  3584.         02h "PullRequest" pull next request from queue
  3585.         DS:SI -> DWORD pointer to start of device's request queue
  3586.         Return: ZF clear if pending request
  3587.                 ES:BX -> request header
  3588.             ZF set if no more requests
  3589.         03h "PullParticular" remove specific request from queue
  3590.         DS:SI -> DWORD pointer to start of device's request queue
  3591.         ES:BX -> request header
  3592.         Return: ZF set if request header not found
  3593.         04h "PushRequest" push the request onto the queue
  3594.         DS:SI -> DWORD pointer to start of device's request queue
  3595.         ES:BX -> request header
  3596.         interrupts disabled
  3597.         05h "ConsInputFilter" keyboard input check
  3598.         AX = character (high byte 00h if PC ASCII character)
  3599.         Return: ZF set if character should be discarded
  3600.             ZF clear if character should be handled normally
  3601.         Note:    called by keyboard interrupt handler so DOS can scan
  3602.               for special input characters
  3603.         06h "SortRequest" push request in sorted order by starting sector
  3604.         DS:SI -> DWORD pointer to start of device's request queue
  3605.         ES:BX -> request header
  3606.         interrupts disabled
  3607.         07h "SigEvent" send signal on keyboard event
  3608.         AH = event identifier
  3609.         Return: AL,FLAGS destroyed
  3610.         09h "ProcBlock" block on event
  3611.         AX:BX = event identifier (typically a pointer)
  3612.         CX = timeout in ms or 0000h for never
  3613.         DH = interruptable flag (nonzero if pause may be interrupted)
  3614.         interrupts disabled
  3615.         Return: after corresponding ProcRun call
  3616.             CF clear if event wakeup, set if unusual wakeup
  3617.             ZF set if timeout wakeup, clear if interrupted
  3618.             AL = wakeup code, nonzero if unusual wakeup
  3619.             interrupts enabled
  3620.             BX,CX,DX destroyed
  3621.         Note:    block process and schedules another to run
  3622.         0Ah "ProcRun" unblock process
  3623.         AX:BX = event identifier (typically a pointer)
  3624.         Return: AX = number of processes awakened
  3625.             ZF set if no processes awakened
  3626.             BX,CX,DX destroyed
  3627.         0Bh "QueueInit" initialize/clear character queue
  3628.         DS:BX -> character queue structure (see #1934)
  3629.         Note:    the queue size field must be set before calling
  3630.         0Dh "QueueWrite" put a character in the queue
  3631.         DS:BX -> character queue (see #1934)
  3632.         AL = character to append to end of queue
  3633.         Return: ZF set if queue is full
  3634.             ZF clear if character stored
  3635.         0Eh "QueueRead" get a character from the queue
  3636.         DS:BX -> character queue (see #1934)
  3637.         Return: ZF set if queue is empty
  3638.             ZF clear if characters in queue
  3639.                 AL = first character in queue
  3640.         10h "GetDOSVar" return pointer to DOS variable
  3641.         AL = index of variable
  3642.             03h current process ID
  3643.         BX = index into variable if AL specifies an array
  3644.         CX = expected length of variable
  3645.         Return: CF clear if successful
  3646.                 DX:AX -> variable
  3647.             CF set on error
  3648.                 AX,DX destroyed
  3649.             BX,CX destroyed
  3650.         Note:    the variables may not be modified
  3651.         14h "Yield" yield CPU if higher-priority task ready to run
  3652.         Return: FLAGS destroyed
  3653.         1Bh "CritEnter" begin system critical section
  3654.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  3655.         Return: AX,BX,CX,DX destroyed
  3656.         1Ch "CritLeave" end system critical section
  3657.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  3658.         Return: AX,BX,CX,DX destroyed
  3659.         Note:    must be called in the context of the process which
  3660.               called CritEnter on the semaphore
  3661. Note:    the DWORD pointing at the request queue must be allocated by the driver
  3662.       and initialized to 0000h:0000h.  It always points at the next request
  3663.       to be executed
  3664.  
  3665. Format of European MS-DOS 4.0 character queue:
  3666. Offset    Size    Description    (Table 1934)
  3667.  00h    WORD    size of queue in bytes
  3668.  02h    WORD    index of next character out
  3669.  04h    WORD    count of characters in the queue
  3670.  06h  N BYTEs    queue buffer
  3671. --------D-2F0803-----------------------------
  3672. INT 2F U - DOS 4.0+ DRIVER.SYS support - GET DRIVE DATA TABLE LIST
  3673.     AX = 0803h
  3674. Return: DS:DI -> first drive data table in list (see #1935,#1936,#1937)
  3675. Note:    not available under DR DOS 5.0, but supported by Novell DOS 7 (using
  3676.       the MS-DOS 4+ data table format)
  3677. SeeAlso: AX=0801h
  3678.  
  3679. Format of DOS 3.30 drive data table:
  3680. Offset    Size    Description    (Table 1935)
  3681.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  3682.  04h    BYTE    physical unit number (for INT 13)
  3683.  05h    BYTE    logical drive number (0=A:)
  3684.  06h 19 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  3685.         Offset    Size    Description
  3686.          00h    WORD    bytes per sector
  3687.          02h    BYTE    sectors per cluster, FFh if unknown
  3688.          03h    WORD    number of reserved sectors
  3689.          05h    BYTE    number of FATs
  3690.          06h    WORD    number of root dir entries
  3691.          08h    WORD    total sectors
  3692.          0Ah    BYTE    media descriptor, 00h if unknown
  3693.          0Bh    WORD    sectors per FAT
  3694.          0Dh    WORD    sectors per track
  3695.          0Fh    WORD    number of heads
  3696.          11h    WORD    number of hidden sectors
  3697.  19h    BYTE    flags
  3698.         bit 6: 16-bit FAT instead of 12-bit FAT
  3699.  1Ah    WORD    number of DEVICE OPEN calls without corresponding DEVICE CLOSE
  3700.  1Ch 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  3701.           fixed media)
  3702.  27h    BYTE    terminating null for volume label???
  3703.  28h    BYTE    device type (see #0903 at INT 21/AX=440Dh"DOS 3.2+")
  3704.  29h    WORD    bit flags describing drive (see #1938)
  3705.  2Bh    WORD    number of cylinders
  3706.  2Dh 19 BYTEs    BIOS Parameter Block for highest capacity supported
  3707.  40h  3 BYTEs    ???
  3708.  43h  9 BYTEs    filesystem type???, default = "NO NAME    "
  3709.         (apparently only MS-DOS 3.30 fixed media, nulls for removable
  3710.           media and PC-DOS 3.30)
  3711.  4Ch    BYTE    least-significant byte of last-accessed cylinder number
  3712. ---removable media---
  3713.  4Dh    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  3714. ---fixed media---
  3715.  4Dh    WORD    partition (FFFFh = primary, 0001h = extended)
  3716.  4Fh    WORD    absolute cylinder number of partition's start on physical
  3717.           drive (always FFFFh if primary partition)
  3718. SeeAlso: #1936,#1937
  3719.  
  3720. Format of COMPAQ DOS 3.31 drive data table:
  3721. Offset    Size    Description    (Table 1936)
  3722.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  3723.  04h    BYTE    physical unit number (for INT 13)
  3724.  05h    BYTE    logical drive number (0=A:)
  3725.  06h 25 BYTEs    BIOS Parameter Block (see #1937)
  3726.  1Fh  6 BYTEs    reserved fields from BPB above???
  3727.  25h    BYTE    flags
  3728.         bit 6: 16-bit FAT instead of 12-bit FAT
  3729.         bit 5: large volume???
  3730.  26h    WORD    device-open count???
  3731.  28h 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  3732.           fixed media)
  3733.  33h    BYTE    terminating null for volume label
  3734.  34h    BYTE    device type (see #0903 at INT 21/AX=440Dh"DOS 3.2+")
  3735.  35h    WORD    bit flags describing drive (see #1938)
  3736.  37h    WORD    number of cylinders
  3737.  39h 25 BYTEs    BIOS parameter block for highest capacity drive supports
  3738.  52h  6 BYTEs    ??? apparently always zeros
  3739.  58h    BYTE    least-significant byte of last-accessed cylinder number
  3740. ---removable media---
  3741.  59h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  3742. ---fixed media---
  3743.  59h    WORD    partition (FFFFh = primary, 0001h = extended)
  3744.  5Bh    WORD    absolute cylinder number of partition's start on physical
  3745.           drive (always FFFFh if primary partition)
  3746. SeeAlso: #1935,#1937
  3747.  
  3748. Format of DOS 4.0-6.0 drive data table:
  3749. Offset    Size    Description    (Table 1937)
  3750.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  3751.  04h    BYTE    physical unit number (for INT 13)
  3752.  05h    BYTE    logical drive number (0=A:)
  3753.  06h 25 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  3754.         Offset    Size    Description
  3755.          00h    WORD    bytes per sector
  3756.          02h    BYTE    sectors per cluster, FFh if unknown
  3757.          03h    WORD    number of reserved sectors
  3758.          05h    BYTE    number of FATs
  3759.          06h    WORD    number of root dir entries
  3760.          08h    WORD    total sectors (refer to offset 15h if zero)
  3761.          0Ah    BYTE    media descriptor, 00h if unknown
  3762.          0Bh    WORD    sectors per FAT
  3763.          0Dh    WORD    sectors per track
  3764.          0Fh    WORD    number of heads
  3765.          11h    DWORD    number of hidden sectors
  3766.          15h    DWORD    total sectors if WORD at 08h is zero
  3767.  1Fh    BYTE    flags
  3768.         bit 6: 16-bit FAT instead of 12-bit
  3769.         bit 7: unsupportable disk (all accesses will return Not Ready)
  3770.  20h    WORD    device-open count
  3771.  22h    BYTE    device type (see #0903 at INT 21/AX=440Dh"DOS 3.2+")
  3772.  23h    WORD    bit flags describing drive (see #1938)
  3773.  25h    WORD    number of cylinders (for partition only, if hard disk)
  3774.  27h 25 BYTEs    BIOS Parameter Block for default (highest) capacity supported
  3775.  40h  6 BYTEs    reserved (part of BPB above)
  3776.  46h    BYTE    last track accessed
  3777. ---removable media---
  3778.  47h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  3779. ---fixed media---
  3780.  47h    WORD    partition (FFFFh = primary, 0001h = extended)
  3781.         always 0001h for DOS 5+
  3782.  49h    WORD    absolute cylinder number of partition's start on physical drive
  3783.         (FFFFh if primary partition in DOS 4.x)
  3784. ------
  3785.  4Bh 11 BYTEs    volume label or "NO NAME    " if none (apparently taken from
  3786.           extended boot record rather than root directory)
  3787.  56h    BYTE    terminating null for volume label
  3788.  57h    DWORD    serial number
  3789.  5Bh  8 BYTEs    filesystem type ("FAT12      " or "FAT16    ")
  3790.  63h    BYTE    terminating null for filesystem type
  3791. SeeAlso: #1935,#1936
  3792.  
  3793. Bitfields for flags describing drive:
  3794. Bit(s)    Description    (Table 1938)
  3795.  0    fixed media
  3796.  1    door lock ("changeline") supported
  3797.  2    current BPB locked
  3798.  3    all sectors in a track are the same size
  3799.  4    physical drive has multiple logical units
  3800.  5    current logical drive for shared physical drive
  3801.  6    disk change detected
  3802.  7    device parameters were changed (set DASD before formatting)
  3803.     (see #0902 at INT 21/AX=440Dh"DOS 3.2+")
  3804.  8    disk reformatted (BPB of current media was changed)
  3805.  9    access flag (fixed media only, disables reads and writes)
  3806.     (see #0908 at INT 21/AX=440Dh"DOS 3.2+")
  3807. --------f-2F1000-----------------------------
  3808. INT 2F - SHARE - INSTALLATION CHECK
  3809.     AX = 1000h
  3810. Return: AL = status
  3811.         00h not installed, OK to install
  3812.         01h not installed, not OK to install
  3813.         FFh installed
  3814. BUGS:    values of AL other than 00h put DOS 3.x SHARE into an infinite loop
  3815.       (08E9: OR  AL,AL
  3816.        08EB: JNZ 08EB) <- the buggy instruction (DOS 3.3)
  3817.     values of AL other than described here put PC-DOS 4.00 into the same
  3818.       loop (the buggy instructions are the same)
  3819. Notes:    supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  3820.     if DOS 4.01 SHARE was automatically loaded, file sharing is in an
  3821.       inactive state (due to the undocumented /NC flag used by the autoload
  3822.       code) until this call is made
  3823.     DOS 5+ chains to the previous handler if AL <> 00h on entry
  3824.     Windows Enhanced mode hooks this call and reports that SHARE is
  3825.       installed even when it is not
  3826. SeeAlso: AX=1080h,INT 21/AH=52h
  3827. --------d-2F1001-----------------------------
  3828. INT 2F U - DR DOS 6.0 SHARE internal - SET ???
  3829.     AX = 1001h
  3830.     DX:BX -> ???function
  3831. Notes:    this function is also supported by SuperStor, a disk-compression
  3832.       program by Addstor which is bundled with DR DOS 6.0, and the
  3833.       Novell DOS 7 DELWATCH.EXE
  3834.     the default handler for the pointer set by this call under DELWATCH
  3835.       simply returns with CF set
  3836. SeeAlso: AX=1000h,AX=F800h
  3837. --------f-2F1040-----------------------------
  3838. INT 2F U - DOS 4 only SHARE internal - ???
  3839.     AX = 1040h
  3840.     ???
  3841. Return: AL = FFh???
  3842. SeeAlso: AX=1000h
  3843. --------f-2F1080-----------------------------
  3844. INT 2F U - DOS 4 only SHARE internal - TURN ON FILE SHARING CHECKS
  3845.     AX = 1080h
  3846. Return: AL = status
  3847.         F0h successful
  3848.         FFh checking was already on
  3849. Note:    DOS 4.x SHARE has dual functions: FCB support for large (>32M) media
  3850.       and file sharing checks.  The undocumented commandline flag /NC can
  3851.       be used to disable the sharing code.
  3852. SeeAlso: AX=1000h,AX=1081h
  3853. --------f-2F1081-----------------------------
  3854. INT 2F U - DOS 4 only SHARE internal - TURN OFF FILE SHARING CHECKS
  3855.     AX = 1081h
  3856. Return: AL = status
  3857.         F0h successful
  3858.         FFh checking was already off
  3859. Note:    (see AX=1080h)
  3860. SeeAlso: AX=1000h,AX=1080h
  3861. --------O-2F10FE-----------------------------
  3862. INT 2F U - Novell DOS 7 DELWATCH.EXE - INSTALLATION CHECK
  3863.     AX = 10FEh
  3864. Return: AX = 20FFh if installed and active
  3865.         DX:BX -> private entry point (see #1939)
  3866.  
  3867. (Table 1939)
  3868. Call DELWATCH private entry point with:
  3869.     AH = function
  3870.         00h NOP???
  3871.         Return: AX = 0000h
  3872.             CX = 0004h (unsupported function)
  3873.         01h disable DELWATCH on drive
  3874.         AL = drive number (00h = A:)
  3875.         Return: AX = status (0000h if failed, FFFFh if successful)
  3876.         02h ???
  3877.         AL = drive number (00h = A:)
  3878.         ???
  3879.         Return: ???
  3880.         03h    ???
  3881.         AL = drive number (00h = A:)
  3882.         CX = ??? (0000h/0001h)
  3883.         ???
  3884.         Return: ???
  3885.         04h ???
  3886.         AL = drive number (00h = A:)
  3887.         ???
  3888.         Return: ???
  3889.         05h ???
  3890.         AL = drive number (00h = A:)
  3891.         ???
  3892.         Return: ???
  3893.         06h enable DELWATCH on drive
  3894.         AL = drive number with bit 7 set (80h = A:, etc.)
  3895.         BX = maximum files of same name in one directory to save
  3896.         CX = maximum files to save on this disk
  3897.         ???
  3898.         Return: AX = status
  3899.                 0000h failed
  3900.                 FFFFh successful
  3901.             CX = error code on failure
  3902.                 (0004h if AL < 80h on entry)
  3903.         07h ???
  3904.         08h set file extensions list
  3905.         AL = sense (00h exclude named extensions, 01h only named ext.)
  3906.         DS:BX -> 31-byte ASCIZ extension list (three blank-padded bytes
  3907.               per extension)
  3908.         Return: AX = FFFFh (successful)
  3909.         09h    ???
  3910.         AL = drive number (00h = A:)
  3911.         ???
  3912.         Return: ???
  3913.         0Ah ???
  3914.         AL = drive number (00h = A:)
  3915.         ???
  3916.         Return: ???
  3917.         0Bh reset ???
  3918.         Return: AX = FFFFh (successful)
  3919.         see also function 0Dh
  3920.         0Ch check if drive enabled
  3921.         AL = drive number with bit 7 set (80h = A:, etc.)
  3922.         Return: AX = state
  3923.                 0000h disabled or error (check CX)
  3924.                 0001h drive enabled
  3925.             CX = error code (0004h invalid drive number)
  3926.         0Dh set ???
  3927.         BX = ???
  3928.         Return: AX = FFFFh (successful)
  3929.         see also function 0Bh
  3930.         0Eh ???
  3931.         AL = drive number (00h = A:)
  3932.         ???
  3933.         Return: ???
  3934. Return: AX = 0000h, CX = 0001h if DELWATCH busy
  3935.     registers unchanged if AH >= 0Fh on entry
  3936. --------O-2F10FF-----------------------------
  3937. INT 2F U - Multiplex - DR DOS 5.0 - ???
  3938.     AX = 10FFh
  3939.     ES:BX -> ???
  3940. Note:    sets pointer in kernel
  3941. --------N-2F1100-----------------------------
  3942. INT 2F C - NETWORK REDIRECTOR - INSTALLATION CHECK
  3943.     AX = 1100h
  3944. Return: AL = status
  3945.         00h not installed, OK to install
  3946.         01h not installed, not OK to install
  3947.         FFh installed
  3948.         AH = product identifier (ad hoc by various manufacturers)
  3949.             00h if PC Tools v8 DRIVEMAP
  3950.             42h ('B') for Beame&Whiteside BWNFS v3.0a
  3951.             6Eh ('n') for NetWare Lite v1.1 CLIENT
  3952. Notes:    this function is called by the DOS 3.1+ kernel
  3953.     in DOS 4.x only, the 11xx calls are all in IFSFUNC.EXE, not in the
  3954.       PC LAN Program redirector; DOS 5+ moves the calls back into the
  3955.       redirector
  3956.     the PC Network 1.00 redirector (renamed to PC LAN Program in 1.1-1.3)
  3957.       only supports AL=00h-27h
  3958. --------d-2F1100SFDADA-----------------------
  3959. INT 2F - MSCDEX (MS CD-ROM Extensions) - INSTALLATION CHECK
  3960.     AX = 1100h subfn DADAh
  3961.     STACK: WORD DADAh
  3962. Return: AL = status
  3963.         00h not installed, OK to install
  3964.         STACK unchanged
  3965.         01h not installed, not OK to install
  3966.         STACK unchanged
  3967.         FFh installed
  3968.         STACK: WORD    ADADh if MSCDEX installed
  3969.                 DADBh if Lotus CD/Networker installed
  3970. Note:    although MSCDEX sets the stack word to ADADh on return, any value other
  3971.       than DADAh is considered to mean that MSCDEX is already installed;
  3972.       Lotus CD/Networker v4+ uses this feature to fool MSCDEX into
  3973.       thinking it is already installed when it is in fact CD/Networker
  3974.       that is installed
  3975. Index:    installation check;Lotus CD/Networker
  3976. Index:    Lotus CD/Networker;installation check
  3977. --------N-2F1101-----------------------------
  3978. INT 2F CU - NETWORK REDIRECTOR - REMOVE REMOTE DIRECTORY
  3979.     AX = 1101h
  3980.     SS = DOS DS
  3981.     SDA first filename pointer -> fully-qualified directory name
  3982.     SDA CDS pointer -> current directory structure for drive with dir
  3983. Return: CF set on error
  3984.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3985.     CF clear if successful
  3986. Note:    this function is called by the DOS 3.1+ kernel
  3987. SeeAlso: AX=1103h,AX=1105h,INT 21/AH=3Ah,INT 21/AH=60h
  3988. --------N-2F1102-----------------------------
  3989. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - REMOVE REMOTE DIRECTORY
  3990.     AX = 1102h
  3991.     SS = DOS DS
  3992.     SDA first filename pointer -> fully-qualified directory name
  3993.     SDA CDS pointer -> current directory structure for drive with dir
  3994. Return: CF set on error
  3995.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  3996.     CF clear if successful
  3997. Note:    appears to be identical to AX=1101h; MS internal documentation calls
  3998.       this function "SEQ_RMDIR"
  3999. SeeAlso: AX=1101h
  4000. --------N-2F1103-----------------------------
  4001. INT 2F CU - NETWORK REDIRECTOR - MAKE REMOTE DIRECTORY
  4002.     AX = 1103h
  4003.     SS = DOS DS
  4004.     SDA first filename pointer -> fully-qualified directory name
  4005.     SDA CDS pointer -> current directory structure for drive with dir
  4006. Return: CF set on error
  4007.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  4008.     CF clear if successful
  4009. Note:    this function is called by the DOS 3.1+ kernel
  4010. SeeAlso: AX=1101h,AX=1105h,INT 21/AH=39h,INT 21/AH=60h
  4011. --------N-2F1104-----------------------------
  4012. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - MAKE REMOTE DIRECTORY
  4013.     AX = 1104h
  4014.     SS = DOS DS
  4015.     SDA first filename pointer -> fully-qualified directory name
  4016.     SDA CDS pointer -> current directory structure for drive with dir
  4017. Return: CF set on error
  4018.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  4019.     CF clear if successful
  4020. Note:    appears to be identical to AX=1103h
  4021. SeeAlso: AX=1103h
  4022. --------N-2F1105-----------------------------
  4023. INT 2F CU - NETWORK REDIRECTOR - CHDIR
  4024.     AX = 1105h
  4025.     SS = DOS DS
  4026.     SDA first filename pointer -> fully-qualified directory name
  4027.     SDA CDS pointer -> current directory structure for drive with dir
  4028. Return: CF set on error
  4029.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  4030.     CF clear if successful
  4031.         CDS updated with new path
  4032. Notes:    this function is called by the DOS 3.1+ kernel
  4033.     directory string in CDS should not have a terminating backslash unless
  4034.       the current directory is the root
  4035. SeeAlso: AX=1101h,AX=1103h,INT 21/AH=3Bh,INT 21/AH=60h
  4036. --------N-2F1106-----------------------------
  4037. INT 2F CU - NETWORK REDIRECTOR - CLOSE REMOTE FILE
  4038.     AX = 1106h
  4039.     BX = device info word from SFT
  4040.     ES:DI -> SFT
  4041.         SFT DPB field -> DPB of drive containing file
  4042. Return: CF set on error
  4043.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  4044.     CF clear if successful
  4045.         SFT updated (redirector must decrement open count, which may be
  4046.           done with INT 2F/AX=1208h)
  4047. Note:    this function is called by the DOS 3.1+ kernel
  4048. SeeAlso: AX=1116h,AX=1201h,AX=1208h,AX=1227h,INT 21/AH=3Eh
  4049. --------N-2F1107-----------------------------
  4050. INT 2F CU - NETWORK REDIRECTOR - COMMIT REMOTE FILE
  4051.     AX = 1107h
  4052.     ES:DI -> SFT
  4053.         SFT DPB field -> DPB of drive containing file
  4054. Return: CF set on error
  4055.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  4056.     CF clear if successful
  4057.         all buffers for file flushed
  4058.         directory entry updated
  4059. Note:    this function is called by the DOS 3.1+ kernel
  4060. SeeAlso: INT 21/AH=68h,INT 21/AX=5D01h
  4061. --------N-2F1108-----------------------------
  4062. INT 2F CU - NETWORK REDIRECTOR - READ FROM REMOTE FILE
  4063.     AX = 1108h
  4064.     ES:DI -> SFT
  4065.         SFT DPB field -> DPB of drive containing file
  4066.     CX = number of bytes
  4067.     SS = DOS DS
  4068.     SDA DTA field -> user buffer
  4069. Return: CF set on error
  4070.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  4071.     CF clear if successful
  4072.         CX = number of bytes read (0000h = end of file)
  4073.         SFT updated
  4074. Note:    this function is called by the DOS 3.1+ kernel
  4075. SeeAlso: AX=1109h,AX=1229h,INT 21/AH=3Fh"DOS",INT 21/AX=5D06h
  4076. --------N-2F1109-----------------------------
  4077. INT 2F CU - NETWORK REDIRECTOR - WRITE TO REMOTE FILE
  4078.     AX = 1109h
  4079.     ES:DI -> SFT
  4080.         SFT DPB field -> DPB of drive containing file
  4081.     CX = number of bytes
  4082.     SS = DOS DS
  4083.     SDA DTA field -> user buffer
  4084. Return: CF set on error
  4085.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  4086.     CF clear if successful
  4087.         CX = number of bytes written
  4088.         SFT updated
  4089. Notes:    this function is called by the DOS 3.1+ kernel
  4090.     PrintCache v3.1 PCACHE.EXE intercepts this function for SFTs where
  4091.       the Device Driver Header field points at PCACHE, but does not
  4092.       intercept any other network redirector functions
  4093. SeeAlso: AX=1107h,AX=1108h,INT 21/AH=40h,INT 21/AX=5D06h
  4094. --------N-2F110A-----------------------------
  4095. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - LOCK REGION OF FILE
  4096.     AX = 110Ah
  4097.     BX = file handle
  4098.     CX:DX = starting offset
  4099.     SI = high word of size
  4100.     STACK: WORD low word of size
  4101.     ES:DI -> SFT
  4102.         SFT DPB field -> DPB of drive containing file
  4103.     SS = DOS DS
  4104. Return: CF set on error
  4105.        AL = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  4106.     STACK unchanged
  4107. Notes:    this function is called by the DOS 3.10-3.31 kernel
  4108.     the redirector is expected to resolve lock conflicts
  4109. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  4110. --------N-2F110A-----------------------------
  4111. INT 2F CU - NETWORK REDIRECTOR (DOS 4.0+) - LOCK/UNLOCK REGION OF FILE
  4112.     AX = 110Ah
  4113.     BL = function
  4114.         00h lock
  4115.         01h unlock
  4116.     CX = number of lock/unlock parameters (0001h for DOS 4.0-6.1)
  4117.     DS:DX -> parameter block (see #1940)
  4118.     ES:DI -> SFT
  4119.         SFT DPB field -> DPB of drive containing file
  4120.     SS = DOS DS
  4121. Return: CF set on error
  4122.        AL = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  4123. Notes:    this function is called by the DOS 4.0+ kernel
  4124.     the redirector is expected to resolve lock conflicts
  4125. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  4126.  
  4127. Format of parameter block entry [array, but currently limited to single entry]:
  4128. Offset    Size    Description    (Table 1940)
  4129.  00h    DWORD    start offset
  4130.  04h    DWORD    size of region
  4131. --------N-2F110B-----------------------------
  4132. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - UNLOCK REGION OF FILE
  4133.     AX = 110Bh
  4134.     BX = file handle
  4135.     CX:DX = starting offset
  4136.     SI = high word of size
  4137.     STACK: WORD low word of size
  4138.     ES:DI -> SFT for file
  4139.         SFT DPB field -> DPB of drive containing file
  4140. Return: CF set on error
  4141.        AL = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  4142.     STACK unchanged
  4143. Note:    this function is called by the DOS 3.1-3.31 kernel; DOS 4.0+ calls
  4144.       AX=110Ah instead
  4145. SeeAlso: AX=110Ah,INT 21/AH=5Ch
  4146. --------N-2F110C-----------------------------
  4147. INT 2F CU - NETWORK REDIRECTOR - GET DISK INFORMATION
  4148.     AX = 110Ch
  4149.     ES:DI -> current directory structure for desired drive
  4150. Return: CF clear if data valid
  4151.         AL = sectors per cluster
  4152.         AH = media ID byte
  4153.         BX = total clusters
  4154.         CX = bytes per sector
  4155.         DX = number of available clusters
  4156.     CF set if data invalid
  4157. Note:    this function is called by the DOS 3.1+ kernel
  4158. SeeAlso: INT 21/AH=36h
  4159. --------N-2F110D-----------------------------
  4160. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - SET REMOTE FILE'S ATTRIBUTES
  4161.     AX = 110Dh
  4162.     SDA first filename pointer -> name of file
  4163.     ???
  4164. Return: ???
  4165. Note:    similar to AX=110Eh
  4166. SeeAlso: AX=110Eh
  4167. --------N-2F110E-----------------------------
  4168. INT 2F CU - NETWORK REDIRECTOR - SET REMOTE FILE'S ATTRIBUTES
  4169.     AX = 110Eh
  4170.     SS = DOS DS
  4171.     SDA first filename pointer -> fully-qualified name of file
  4172.     SDA CDS pointer -> current directory structure for drive with file
  4173.     STACK: WORD new file attributes
  4174. Return: CF set on error
  4175.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  4176.     CF clear if successful
  4177.     STACK unchanged
  4178. Note:    this function is called by the DOS 3.1+ kernel
  4179. SeeAlso: AX=110Dh,AX=110Fh,INT 21/AX=4301h,INT 21/AH=60h
  4180. --------N-2F110F-----------------------------
  4181. INT 2F CU - NETWORK REDIRECTOR - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  4182.     AX = 110Fh
  4183.     SS = DOS DS
  4184.     SDA first filename pointer -> fully-qualified name of file
  4185.     SDA CDS pointer -> current directory structure for drive with file
  4186. Return: CF set on error
  4187.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  4188.     CF clear if successful
  4189.         AX = file attributes
  4190.         BX:DI = file size
  4191. Note:    this function is called by the DOS 3.1+ kernel
  4192. SeeAlso: AX=110Eh,INT 21/AX=4300h,INT 21/AH=60h
  4193. --------N-2F1110-----------------------------
  4194. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  4195.     AX = 1110h
  4196.     SDA first filename pointer -> name of file
  4197.     ???
  4198. Return: ???
  4199. Note:    appears to be similar to AX=110Fh
  4200. SeeAlso: AX=110Eh
  4201. --------N-2F1111-----------------------------
  4202. INT 2F CU - NETWORK REDIRECTOR - RENAME REMOTE FILE
  4203.     AX = 1111h
  4204.     SS = DS = DOS DS
  4205.     SDA first filename pointer = offset of fully-qualified old name
  4206.     SDA second filename pointer = offset of fully-qualified new name
  4207.     SDA CDS pointer -> current directory structure for drive with file
  4208. Return: CF set on error
  4209.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  4210.     CF clear if successful
  4211. Note:    this function is called by the DOS 3.1+ kernel
  4212. SeeAlso: AX=1112h,INT 21/AH=56h,INT 21/AH=60h
  4213. --------N-2F1112-----------------------------
  4214. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - RENAME REMOTE FILE
  4215.     AX = 1112h
  4216.     SS = DS = DOS DS
  4217.     SDA first filename pointer -> name of file
  4218.     ???
  4219. Return: ???
  4220. Note:    similar to AX=1111h
  4221. SeeAlso: AX=1111h
  4222. --------N-2F1113-----------------------------
  4223. INT 2F CU - NETWORK REDIRECTOR - DELETE REMOTE FILE
  4224.     AX = 1113h
  4225.     SS = DS = DOS DS
  4226.     SDA first filename pointer -> fully-qualified filename in DOS DS
  4227.     SDA CDS pointer -> current directory structure for drive with file
  4228. Return: CF set on error
  4229.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  4230.     CF clear if successful
  4231. Notes:    this function is called by the DOS 3.1+ kernel
  4232.     the filespec may contain wildcards
  4233. SeeAlso: AX=1114h,INT 21/AH=41h,INT 21/AH=60h
  4234. --------N-2F1114-----------------------------
  4235. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - DELETE REMOTE FILE
  4236.     AX = 1114h
  4237.     SDA first filename pointer -> name of file
  4238.     ???
  4239. Return: ???
  4240. Note:    similar to AX=1113h
  4241. SeeAlso: AX=1113h
  4242. --------N-2F1115-----------------------------
  4243. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - OPEN REMOTE FILE
  4244.     AX = 1115h
  4245.     SS = DOS DS
  4246.     ES:DI -> SFT ???
  4247.     ???
  4248. Return: ???
  4249. Note:    similar to AX=1116h
  4250. SeeAlso: AX=1116h,AX=112Eh
  4251. --------N-2F1116-----------------------------
  4252. INT 2F CU - NETWORK REDIRECTOR - OPEN EXISTING REMOTE FILE
  4253.     AX = 1116h
  4254.     ES:DI -> uninitialized SFT
  4255.     SS = DOS DS
  4256.     SDA first filename pointer -> fully-qualified name of file to open
  4257.     STACK: WORD file access and sharing modes (see #0749 at INT 21/AH=3Dh)
  4258. Return: CF set on error
  4259.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  4260.     CF clear if successful
  4261.         SFT filled (except handle count, which DOS manages itself)
  4262.     STACK unchanged
  4263. Note:    this function is called by the DOS 3.1+ kernel
  4264. SeeAlso: AX=1106h,AX=1115h,AX=1117h,AX=1118h,AX=112Eh,INT 21/AH=3Dh
  4265. SeeAlso: INT 21/AH=60h
  4266. --------N-2F1117-----------------------------
  4267. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE REMOTE FILE
  4268.     AX = 1117h
  4269.     ES:DI -> uninitialized SFT
  4270.     SS = DOS DS
  4271.     SDA first filename pointer -> fully-qualified name of file to open
  4272.     SDA CDS pointer -> current directory structure for drive with file
  4273.     STACK: WORD file creation mode
  4274.             low byte = file attributes (see #0748 at INT 21/AH=3Ch)
  4275.             high byte = 00h normal create, 01h create new file
  4276. Return: CF set on error
  4277.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  4278.     CF clear if successful
  4279.         SFT filled (except handle count, which DOS manages itself)
  4280.     STACK unchanged
  4281. Note:    this function is called by the DOS 3.1+ kernel
  4282. SeeAlso: AX=1106h,AX=1116h,AX=1118h,AX=112Eh,INT 21/AH=3Ch,INT 21/AH=60h
  4283. --------N-2F1118-----------------------------
  4284. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE FILE WITHOUT CDS
  4285.     AX = 1118h
  4286.     ES:DI -> uninitialized SFT
  4287.     SS = DOS DS
  4288.     SDA first filename pointer -> fully-qualified name of file
  4289.     STACK: WORD file creation mode
  4290.             low byte = file attributes
  4291.             high byte = 00h normal create, 01h create new file
  4292. Return: ???
  4293.     STACK unchanged
  4294. Note:    this function is called by the DOS 3.1+ kernel when creating a file
  4295.       on a drive for which the SDA CDS pointer has offset FFFFh
  4296. SeeAlso: AX=1106h,AX=1116h,AX=1117h,AX=112Eh,INT 21/AH=60h
  4297. --------N-2F1119-----------------------------
  4298. INT 2F CU - NETWORK REDIRECTOR - FIND FIRST FILE WITHOUT CDS
  4299.     AX = 1119h
  4300.     SS = DS = DOS DS
  4301.     [DTA] = uninitialized 21-byte findfirst search data
  4302.           (see #0967 at INT 21/AH=4Eh)
  4303.     SDA first filename pointer -> fully-qualified search template
  4304.     SDA search attribute = attribute mask for search
  4305. Return: CF set on error
  4306.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  4307.     CF clear if successful
  4308.         [DTA] = updated findfirst search data
  4309.             (bit 7 of first byte must be set)
  4310.         [DTA+15h] = standard directory entry for file (see #0700)
  4311. Notes:    this function is called by the DOS 3.1+ kernel
  4312.     DOS 4.x IFSFUNC returns CF set, AX=0003h
  4313. SeeAlso: AX=111Ah,AX=111Bh,INT 21/AH=1Ah
  4314. --------N-2F111A-----------------------------
  4315. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - FIND NEXT FILE WITHOUT CDS
  4316.     AX = 111Ah
  4317.     ???
  4318. Return: CF set
  4319.         AX = error code (03h for DOS 4.01 IFSFUNC)
  4320. Note:    use AX=111Ch for DOS 5+
  4321. SeeAlso: AX=1119h,AX=111Ch
  4322. --------N-2F111B-----------------------------
  4323. INT 2F CU - NETWORK REDIRECTOR - FINDFIRST
  4324.     AX = 111Bh
  4325.     SS = DS = DOS DS
  4326.     [DTA] = uninitialized 21-byte findfirst search data
  4327.           (see #0967 at INT 21/AH=4Eh)
  4328.     SDA first filename pointer -> fully-qualified search template
  4329.     SDA CDS pointer -> current directory structure for drive with file
  4330.     SDA search attribute = attribute mask for search
  4331. Return: CF set on error
  4332.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  4333.     CF clear if successful
  4334.         [DTA] = updated findfirst search data
  4335.             (bit 7 of first byte must be set)
  4336.         [DTA+15h] = standard directory entry for file (see #0700)
  4337. Note:    this function is called by the DOS 3.1+ kernel
  4338. SeeAlso: AX=1119h,AX=111Ch,INT 21/AH=1Ah,INT 21/AH=4Eh,INT 21/AH=60h
  4339. --------N-2F111C-----------------------------
  4340. INT 2F CU - NETWORK REDIRECTOR - FINDNEXT
  4341.     AX = 111Ch
  4342.     SS = DS = DOS DS
  4343.     ES:DI -> CDS
  4344.     ES:DI -> DTA (MSDOS v5.0)
  4345.     [DTA] = 21-byte findfirst search data
  4346.           (see #0967 at INT 21/AH=4Eh)
  4347. Return: CF set on error
  4348.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  4349.     CF clear if successful
  4350.         [DTA] = updated findfirst search data
  4351.             (bit 7 of first byte must be set)
  4352.         [DTA+15h] = standard directory entry for file (see #0700)
  4353. Note:    this function is called by the DOS 3.1+ kernel
  4354. SeeAlso: AX=1119h,AX=111Bh,INT 21/AH=1Ah,INT 21/AH=4Fh
  4355. --------N-2F111D-----------------------------
  4356. INT 2F CU - NETWORK REDIRECTOR - CLOSE ALL REMOTE FILES FOR PROCESS (ABORT)
  4357.     AX = 111Dh
  4358.     SS = DOS DS
  4359.     SDA PSP segment field = PSP of terminating process
  4360. Return: nothing
  4361. Notes:    used when a process is aborted; the process being terminated is
  4362.       indicated by the "sharing PSP" field in the SDA (offset 1Ah/1Ch)
  4363.     this function is called by the DOS 3.1+ kernel
  4364.     closes all FCBs opened by process
  4365. SeeAlso: INT 21/AX=5D04h
  4366. --------N-2F111E-----------------------------
  4367. INT 2F CU - NETWORK REDIRECTOR - DO REDIRECTION
  4368.     AX = 111Eh
  4369.     SS = DOS DS
  4370.     STACK: WORD function to execute
  4371.         5F00h  get redirection mode
  4372.             BL = type (03h printer, 04h disk)
  4373.             Return: BH = state (00h off, 01h on)
  4374.         5F01h  set redirection mode
  4375.             BL = type (03h printer, 04h disk)
  4376.             BH = state (00h off, 01h on)
  4377.         5F02h  get redirection list entry
  4378.             BX = redirection list index
  4379.             DS:SI -> 16-byte local device name buffer
  4380.             ES:DI -> 128-byte network name buffer
  4381.             Return: must set user's BX to device type and CX to
  4382.                 stored parameter value, using AX=1218h to get
  4383.                 stack frame address
  4384.         5F03h  redirect device
  4385.             BL = device type (see INT 21/AX=5F03h)
  4386.             CX = stored parameter value
  4387.             DS:SI -> ASCIZ source device name
  4388.             ES:DI -> destination ASCIZ network path + ASCIZ passwd
  4389.         5F04h  cancel redirection
  4390.             DS:SI -> ASCIZ device name or network path
  4391.         5F05h  get redirection list extended entry
  4392.             BX = redirection list index
  4393.             DS:SI -> buffer for ASCIZ source device name
  4394.             ES:DI -> buffer for destination ASCIZ network path
  4395.             Return: BH = status flag
  4396.                 BL = type (03h printer, 04h disk)
  4397.                 CX = stored parameter value
  4398.                 BP = NETBIOS local session number
  4399.         5F06h  similar to 5F05h???
  4400. Return: CF set on error
  4401.         AX = error code (see #1020 at INT 21/AH=59h/BX=0000h)
  4402.     STACK unchanged
  4403. Notes:    this function is called by the DOS 3.1+ kernel on INT 21/AH=5Fh
  4404.       (including LAN Manager calls)
  4405.     the PC Network 1.00 redirector does not support function 5F06h
  4406. SeeAlso: INT 21/AX=5F00h,INT 21/AX=5F01h,INT 21/AX=5F02h,INT 21/AX=5F03h
  4407. SeeAlso: INT 21/AX=5F04h,INT 21/AX=5F05h,INT 21/AX=5F06h
  4408. --------N-2F111F-----------------------------
  4409. INT 2F CU - NETWORK REDIRECTOR - PRINTER SETUP
  4410.     AX = 111Fh
  4411.     STACK: WORD function
  4412.         5E02h  set printer setup
  4413.         5E03h  get printer setup
  4414.         5E04h  set printer mode
  4415.         5E05h  get printer mode
  4416. Return: CF set on error
  4417.         AX = error code (see #1020 at INT 21/AH=59h/BX=0000h)
  4418.     STACK unchanged
  4419. Note:    this function is called by the DOS 3.1+ kernel
  4420. SeeAlso: INT 21/AX=5E02h,INT 21/AX=5E03h,INT 21/AX=5E04h,INT 21/AX=5E05h
  4421. --------N-2F1120-----------------------------
  4422. INT 2F CU - NETWORK REDIRECTOR - FLUSH ALL DISK BUFFERS
  4423.     AX = 1120h
  4424.     DS = DOS DS
  4425.     ???
  4426. Return: CF clear (successful)
  4427. Notes:    this function is called by the DOS 3.1+ kernel
  4428.     uses CDS array pointer and LASTDRIVE= entries in DOS list of lists
  4429. SeeAlso: INT 21/AH=0Dh,INT 21/AX=5D01h
  4430. --------N-2F1121-----------------------------
  4431. INT 2F CU - NETWORK REDIRECTOR - SEEK FROM END OF REMOTE FILE
  4432.     AX = 1121h
  4433.     CX:DX = offset (in bytes) from end
  4434.     ES:DI -> SFT
  4435.         SFT DPB field -> DPB of drive with file
  4436.     SS = DOS DS
  4437. Return: CF set on error
  4438.         AL = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  4439.     CF clear if successful
  4440.         DX:AX = new file position
  4441. Note:    this function is called by the DOS 3.1+ kernel, but only when seeking
  4442.       from the end of a file opened with sharing modes set in such a
  4443.       manner that another process is able to change the size of the file
  4444.       while it is already open
  4445. SeeAlso: AX=1228h,INT 21/AH=42h
  4446. --------N-2F1122-----------------------------
  4447. INT 2F CU - NETWORK REDIRECTOR - PROCESS TERMINATION HOOK
  4448.     AX = 1122h
  4449.     SS = DOS DS
  4450.     DS = PSP of process about to terminate
  4451. Return: ???
  4452. Notes:    this function is called by the DOS 3.1+ kernel
  4453.     after calling this function, the kernel calls INT 2F/AX=111Dh
  4454. SeeAlso: AX=111Dh,INT 21/AH=4Ch,INT 60/DI=0601h
  4455. --------N-2F1123-----------------------------
  4456. INT 2F CU - NETWORK REDIRECTOR - QUALIFY REMOTE FILENAME
  4457.     AX = 1123h
  4458.     DS:SI -> ASCIZ filename to canonicalize
  4459.     ES:DI -> 128-byte buffer for qualified name
  4460. Return: CF set if not resolved
  4461. Notes:    called by MS-DOS 3.1+ kernel, but not called by DR DOS 5.0 unless the
  4462.       filename matches the name of a character device
  4463.     called first when DOS attempts to resolve a filename (unless inside an
  4464.       AX=5D00h server call); if this fails, DOS resolves the name locally
  4465. SeeAlso: AX=1221h,INT 21/AH=60h
  4466. --------N-2F1124-----------------------------
  4467. INT 2F CU - NETWORK REDIRECTOR - TURN OFF REMOTE PRINTER
  4468.     AX = 1124h
  4469.     ES:DI -> SFT
  4470.     SS = DOS DS
  4471.     ???
  4472. Return: CX = ???
  4473. Note:    this function is called by the DOS 3.1+ kernel if AX=1126h
  4474.       returns CF set
  4475. SeeAlso: AX=1126h
  4476. --------N-2F1125-----------------------------
  4477. INT 2F CU - NETWORK REDIRECTOR - REDIRECTED PRINTER MODE
  4478.     AX = 1125h
  4479.     STACK: WORD subfunction
  4480.         5D07h get print stream state
  4481.             Return: DL = current state
  4482.         5D08h set print stream state
  4483.             DL = new state
  4484.         5D09h finish print job
  4485. Return: CF set on error
  4486.         AX = error code (see #1020 at INT 21/AH=59h/BX=0000h)
  4487.     STACK unchanged
  4488. Note:    this function is called by the DOS 3.1+ kernel
  4489. SeeAlso: INT 21/AX=5D07h,INT 21/AX=5D08h,INT 21/AX=5D09h
  4490. --------N-2F1126-----------------------------
  4491. INT 2F CU - NETWORK REDIRECTOR - REMOTE PRINTER ECHO ON/OFF
  4492.     AX = 1126h
  4493.     ES:DI -> SFT for file handle 4???
  4494.     SS = DOS DS???
  4495.     ???
  4496. Return: CF set on error
  4497. Notes:    this function is called by the DOS 3.1+ kernel
  4498.     called when print echoing (^P, ^PrtSc) changes state and STDPRN has
  4499.       bit 11 of the device information word in the SFT set
  4500. SeeAlso: AX=1124h
  4501. --------N-2F1127-----------------------------
  4502. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  4503.     AX = 1127h
  4504. Return: CF set
  4505.         AX = 0001h (invalid function) (see #1020 at INT 21/AH=59h/BX=0000h)
  4506. --------N-2F1127BX4E57-----------------------
  4507. INT 2F - NetWare 4.0 - REMOTE FILE COPY
  4508.     AX = 1127h
  4509.     BX = 4E57h ('NW') (signature identifying this as a NetWare call)
  4510.     SI = source file handle
  4511.     DI = destination file handle
  4512.     DX:CX = number of bytes to copy, starting at current file position
  4513. Return: CF clear if successful
  4514.     CF set on error
  4515.         AX = error code (05h,06h,0Bh,11h,3Bh) (see #1020)
  4516.     DX:CX = number of bytes successfully copied (file position updated)
  4517. Notes:    this is the only call which may be made directly to the NetWare
  4518.       redirector from an application
  4519.     COMMAND.COM's COPY and DOS's XCOPY reportedly call INT 21/AX=1127h in
  4520.       order to speed up copies between files on the same network server;
  4521.       if error code 11h (not same device) is returned, the copy is
  4522.       performed in the usual manner.  However, no such calls appear to
  4523.       be present in MS-DOS 6.22.
  4524. --------N-2F1128-----------------------------
  4525. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  4526.     AX = 1128h
  4527. Return: CF set
  4528.         AX = 0001h (invalid function) (see #1020 at INT 21/AH=59h/BX=0000h)
  4529. --------N-2F1129-----------------------------
  4530. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  4531.     AX = 1129h
  4532. Return: CF set
  4533.         AX = 0001h (invalid function) (see #1020 at INT 21/AH=59h/BX=0000h)
  4534. --------N-2F112A-----------------------------
  4535. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - CLOSE ALL FILES FOR PROCESS
  4536.     AX = 112Ah
  4537.     DS = DOS DS
  4538.     ???
  4539. Return: ???
  4540. Note:    does something to each IFS driver
  4541. --------N-2F112B-----------------------------
  4542. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GENERIC IOCTL
  4543.     AX = 112Bh
  4544.     SS = DOS DS
  4545.     CX = function/category
  4546.     DS:DX -> parameter block
  4547.     STACK: WORD value of AX on entry to INT 21 (440Ch or 440Dh)
  4548.     ???
  4549. Return: CF set on error
  4550.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  4551.     CF clear if successful
  4552. Note:    this function is called by the DOS 4.0 kernel
  4553. --------N-2F112C-----------------------------
  4554. INT 2F CU - NETWORK REDIRECTOR (DOS 4.0+) - "UPDATE_CB" - ???
  4555.     AX = 112Ch
  4556.     SS = DOS DS
  4557.     SDA current SFT pointer -> SFT for file
  4558.     ???
  4559. Return: CF set on error
  4560. Note:    called by SHARE in DOS 5.0-6.0
  4561. --------N-2F112D-----------------------------
  4562. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - EXTENDED ATTRIBUTES
  4563.     AX = 112Dh
  4564.     BL = subfunction (value of AL on INT 21)
  4565.         02h get extended attributes
  4566.         03h get extended attribute properties
  4567.         04h set extended attributes
  4568.         Return: CF clear
  4569.         else ???
  4570.         Return: CX = ??? (00h or 02h for DOS 4.01)
  4571.     ES:DI -> SFT for file
  4572.     SS = DOS DS
  4573. Return: DS = DOS DS
  4574. Note:    this function is called by the DOS 4.0 kernel on INT 21/AX=5702h,
  4575.       INT 21/AX=5703h, and INT 21/AX=5704h
  4576. SeeAlso: INT 21/AX=5702h,INT 21/AX=5703h,INT 21/AX=5704h,INT 21/AH=6Eh
  4577. --------N-2F112E-----------------------------
  4578. INT 2F CU - NETWORK REDIRECTOR (DOS 4.0+) - EXTENDED OPEN/CREATE FILE
  4579.     AX = 112Eh
  4580.     SS = DS = DOS DS
  4581.     ES:DI -> uninitialized SFT for file
  4582.     STACK: WORD file attribute for created/truncated file
  4583.             low byte = file attributes
  4584.             high byte = 00h normal create/open, 01h create new file
  4585.     SDA first filename pointer -> fully-qualified filename
  4586.     SDA extended file open action = action code
  4587.           (see #1112 at INT 21/AX=6C00h)
  4588.     SDA extended file open mode = open mode for file (see INT 21/AX=6C00h)
  4589. Return: CF set on error
  4590.         AX = error code
  4591.     CF clear if successful
  4592.         CX = result code
  4593.         01h file opened
  4594.         02h file created
  4595.         03h file replaced (truncated)
  4596.         SFT initialized (except handle count, which DOS manages itself)
  4597. Note:    this function is called by the DOS 4.0+ kernel
  4598. BUG:    this function is not called correctly under some DOS versions
  4599.       (at least 5.0 and 6.2):
  4600.         the file attribute on the stack is not correct if the action
  4601.           code is 11h,
  4602.         the result code in CX is not passed back to the application.
  4603. SeeAlso: AX=1115h,AX=1116h,AX=1117h,INT 21/AX=6C00h
  4604. --------N-2F112F-----------------------------
  4605. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - IFS IOCTL
  4606.     AX = 112Fh
  4607.     SS = DOS DS
  4608.     STACK: WORD function in low byte
  4609.         00h ???
  4610.             DS:SI -> Current Directory Structure???
  4611.             CL = drive (1=A:)
  4612.         01h ???
  4613.             DS:SI -> ???
  4614.             CL = file handle???
  4615.         02h ???
  4616.             DS:SI -> Current Directory Structure???
  4617.             DI = ???
  4618.             CX = drive (1=A:)
  4619.     ???
  4620. Return: CF set on error
  4621.         AX = DOS error code (see #1020 at INT 21/AH=59h/BX=0000h)
  4622.     CF clear if successful
  4623. Note:    this function is called by the DOS 4.0 kernel
  4624. SeeAlso: INT 21/AH=6Bh
  4625. --------N-2F1130-----------------------------
  4626. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET IFSFUNC SEGMENT
  4627.     AX = 1130h
  4628. Return: ES = CS of resident IFSFUNC
  4629. --------N-2F1180-----------------------------
  4630. INT 2F - LAN Manager Enhanced DOS Services - ???
  4631.     AX = 1180h
  4632.     ???
  4633. Return: ???
  4634. --------N-2F1182-----------------------------
  4635. INT 2F - LAN Manager Enhanced DOS Services - INSTALL SERVICE
  4636.     AX = 1182h
  4637.     ???
  4638. Return: ???
  4639. --------N-2F1184-----------------------------
  4640. INT 2F - LAN Manager Enhanced DOS - ???
  4641.     AX = 1184h
  4642.     ???
  4643. Return: ???
  4644. --------N-2F1186-----------------------------
  4645. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe
  4646.     AX = 1186h
  4647.     DS:SI -> stack frame (see #1941)
  4648. Return: CF clear if successful
  4649.     CF set if error
  4650.         AX = error code
  4651. Note:    LAN Manager enhance mode adds features beyond the standard redirector
  4652.       file/printer services
  4653. SeeAlso: AX=118Fh,AX=1190h,AX=1191h,INT 21/AX=5F39h
  4654.  
  4655. Format of LAN Manager DosReadAsynchNmPipe stack frame:
  4656. Offset    Size    Description    (Table 1941)
  4657.  00h    DWORD    -> number of bytes read
  4658.  04h    WORD    size of buffer
  4659.  06h    DWORD    -> buffer
  4660.  0Ah    DWORD    -> return code
  4661.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  4662.  12h    WORD    handle
  4663. --------N-2F118A-----------------------------
  4664. INT 2F - LAN Manager 2.0+ DOS Enhanced ENCRYPT.EXE - STREAM ENCRYPTION SERVICE
  4665.     AX = 118Ah
  4666.     BX = function (0000h or 0001h)
  4667. Return: CF clear if successful
  4668.         AX = 1100h success
  4669.     CF set if error
  4670.         AX = 0001h, etc.
  4671. SeeAlso: AX=1186h,AH=41h,AH=42h,AH=4Bh
  4672. --------N-2F118B-----------------------------
  4673. INT 2F - LAN Manager Enhanced DOS - ???
  4674.     AX = 118Bh
  4675.     ???
  4676. Return: ???
  4677. --------N-2F118C-----------------------------
  4678. INT 2F - LAN Manager Enhanced DOS - ???
  4679.     AX = 118Ch
  4680.     ???
  4681. Return: ???
  4682. --------N-2F118E-----------------------------
  4683. INT 2F - LAN Manager Enhanced DOS - ???
  4684.     AX = 118Eh
  4685.     ???
  4686. Return: ???
  4687. --------N-2F118F-----------------------------
  4688. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe
  4689.     AX = 118Fh
  4690.     DS:SI -> stack frame (see #1942)
  4691. Return: CF clear if successful
  4692.     CF set if error
  4693.         AX = error code
  4694. SeeAlso: AX=1186h,AX=1191h,INT 21/AX=5F3Ah
  4695.  
  4696. Format of LAN Manager DosReadAsynchNmPipe stack frame:
  4697. Offset    Size    Description    (Table 1942)
  4698.  00h    DWORD    -> number of bytes read
  4699.  04h    WORD    Size of buffer
  4700.  06h    DWORD    -> buffer
  4701.  0Ah    DWORD    -> return code
  4702.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  4703.  12h    WORD    handle
  4704. --------N-2F1190-----------------------------
  4705. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe2
  4706.     AX = 1190h
  4707.     DS:SI -> stack frame (see #1943)
  4708. Return: CF clear if successful
  4709.     CF set if error
  4710.         AX = error code
  4711. SeeAlso: AX=1186h,AX=1191h
  4712.  
  4713. Format of LAN Manager DosReadAsynchNmPipe2 stack frame:
  4714. Offset    Size    Description    (Table 1943)
  4715.  00h    DWORD    -> number of bytes read
  4716.  04h    WORD    size of buffer
  4717.  06h    DWORD    -> buffer
  4718.  0Ah    DWORD    -> return code
  4719.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  4720.  12h    WORD    handle
  4721.  14h    DWORD    ???
  4722. --------N-2F1191-----------------------------
  4723. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe2
  4724.     AX = 1191h
  4725.     DS:SI -> stack frame (see #1944)
  4726. Return: CF clear if successful
  4727.     CF set if error
  4728.         AX = error code
  4729. SeeAlso: AX=118Fh,AX=1190h,INT 21/AX=5F3Ah
  4730.  
  4731. Format of LAN Manager DosReadAsynchNmPipe2 stack frame:
  4732. Offset    Size    Description    (Table 1944)
  4733.  00h    DWORD    -> number of bytes read
  4734.  04h    WORD    size of buffer
  4735.  06h    DWORD    -> buffer
  4736.  0Ah    DWORD    -> return code
  4737.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  4738.  12h    WORD    handle
  4739.  14h    DWORD    ???
  4740. --------D-2F1200-----------------------------
  4741. INT 2F U - DOS 3.0+ internal - INSTALLATION CHECK
  4742.     AX = 1200h
  4743. Return: AL = FFh (for compatibility with other INT 2F functions)
  4744. --------D-2F1201-----------------------------
  4745. INT 2F U - DOS 3.0+ internal - CLOSE CURRENT FILE
  4746.     AX = 1201h
  4747.     SS = DOS DS (must be using a DOS internal stack)
  4748.     SDA current SFT pointer -> SFT of file to close
  4749. Return: CF set on error
  4750.     BX???
  4751.     CX new reference count of SFT
  4752.     ES:DI -> SFT for file
  4753. SeeAlso: AX=1106h,AX=1227h,INT 21/AH=3Eh
  4754. --------D-2F1202-----------------------------
  4755. INT 2F U - DOS 3.0+ internal - GET INTERRUPT ADDRESS
  4756.     AX = 1202h
  4757.     STACK: WORD vector number
  4758. Return: ES:BX -> interrupt vector (DWORD containing handler's address)
  4759.     STACK unchanged
  4760. --------D-2F1203-----------------------------
  4761. INT 2F U - DOS 3.0+ internal - GET DOS DATA SEGMENT
  4762.     AX = 1203h
  4763. Return: DS = data segment of IBMDOS.COM/MSDOS.SYS
  4764. Note:    for DOS prior to version 5.0, the data segment is the same as the code
  4765.       segment
  4766. --------D-2F1204-----------------------------
  4767. INT 2F U - DOS 3.0+ internal - NORMALIZE PATH SEPARATOR
  4768.     AX = 1204h
  4769.     STACK: WORD character to normalize
  4770. Return: AL = normalized character (forward slash turned to backslash, all
  4771.           others unchanged)
  4772.     ZF set if path separator
  4773.     STACK unchanged
  4774. --------D-2F1205-----------------------------
  4775. INT 2F U - DOS 3.0+ internal - OUTPUT CHARACTER TO STANDARD OUTPUT
  4776.     AX = 1205h
  4777.     STACK: WORD character to output
  4778. Return: STACK unchanged
  4779. Note:    can be called only from within DOS
  4780. --------D-2F1206-----------------------------
  4781. INT 2F U - DOS 3.0+ internal - INVOKE CRITICAL ERROR
  4782.     AX = 1206h
  4783.     DI = error code
  4784.     BP:SI -> device driver header (see #0987)
  4785.     SS = DOS DS (must be using a DOS internal stack)
  4786.     STACK: WORD value to be passed to INT 24 in AX
  4787. Return: AL = 0-3 for Abort, Retry, Ignore, Fail
  4788.     STACK unchanged
  4789. SeeAlso: INT 24
  4790. --------D-2F1207-----------------------------
  4791. INT 2F U - DOS 3.0+ internal - MAKE DISK BUFFER MOST-RECENTLY USED
  4792.     AX = 1207h
  4793.     DS:DI -> disk buffer
  4794. Return: nothing
  4795. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  4796.       recently used is first); under DOS 3.3, the buffer is then moved to
  4797.       the start of the disk buffer chain if it was marked unused
  4798. Notes:    can be called only from within DOS
  4799.     this function is nearly the same as AX=120Fh
  4800. SeeAlso: AX=120Fh
  4801. --------D-2F1208-----------------------------
  4802. INT 2F U - DOS 3.0+ internal - DECREMENT SFT REFERENCE COUNT
  4803.     AX = 1208h
  4804.     ES:DI -> SFT
  4805. Return: AX = original value of reference count
  4806. Notes:    if the reference count was 1, it is set to FFFFh (since 0 indicates
  4807.       that the SFT is not in use).    It is the caller's responsibility to
  4808.       set the reference count to zero after cleaning up.
  4809.     used by network redirectors such as MSCDEX
  4810. SeeAlso: AX=1106h
  4811. --------D-2F1209-----------------------------
  4812. INT 2F U - DOS 3.0+ internal - FLUSH AND FREE DISK BUFFER
  4813.     AX = 1209h
  4814.     DS:DI -> disk buffer
  4815. Return: disk buffer marked unused, contents written to disk if buffer dirty
  4816. Note:    can be called only from within DOS
  4817. SeeAlso: AX=120Eh,AX=1215h
  4818. --------D-2F120A-----------------------------
  4819. INT 2F U - DOS 3.0+ internal - PERFORM CRITICAL ERROR INTERRUPT
  4820.     AX = 120Ah
  4821.     DS = SS = DOS DS (must be using a DOS internal stack)
  4822.     STACK: WORD extended error code
  4823. Return: AL = user response (0=ignore, 1=retry, 2=abort, 3=fail)
  4824.     CF clear if retry, set otherwise
  4825.     STACK unchanged
  4826. Notes:    can only be called during a DOS function call, as it uses various
  4827.       fields in the SDA to set up the registers for the INT 24
  4828.     reportedly sets current DPB's first root directory sector to 1
  4829. SeeAlso: INT 24
  4830. --------D-2F120B-----------------------------
  4831. INT 2F U - DOS 3.0+ internal - SIGNAL SHARING VIOLATION TO USER
  4832.     AX = 120Bh
  4833.     ES:DI -> system file table entry for previous open of file
  4834.     STACK: WORD extended error code (should be 20h--sharing violation)
  4835. Return: CF clear if operation should be retried
  4836.     CF set if operation should not be retried
  4837.         AX = error code (20h) (see #1020 at INT 21/AH=59h/BX=0000h)
  4838.     STACK unchanged
  4839. Notes:    can only be called during a DOS function call
  4840.     should only be called if an attempt was made to open an already-open
  4841.       file contrary to the sharing rules
  4842.     invokes INT 24 if SFT file opened via FCB or in compatibility mode with
  4843.       inheritance allowed
  4844. --------D-2F120C-----------------------------
  4845. INT 2F U - DOS 3.0+ internal - OPEN DEVICE AND SET SFT OWNER/MODE
  4846.     AX = 120Ch
  4847.     SDA current SFT pointer -> SFT for file
  4848.     DS = DOS DS
  4849.     SS = DOS DS (must be using a DOS internal stack)
  4850. Return: ES, DI, AX destroyed
  4851. Notes:    invokes "device open" call on device driver for SFT
  4852.     changes owner of last-accessed SFT to calling process if it was opened
  4853.       via FCB
  4854.     called by network redirectors such as MSCDEX
  4855. --------D-2F120D-----------------------------
  4856. INT 2F U - DOS 3.0+ internal - GET DATE AND TIME
  4857.     AX = 120Dh
  4858.     SS = DOS DS (must be using a DOS internal stack)
  4859. Return: AX = current date in packed format (see #1006 at INT 21/AX=5700h)
  4860.     DX = current time in packed format (see #1005 at INT 21/AX=5700h)
  4861. SeeAlso: INT 21/AH=2Ah,INT 21/AH=2Ch
  4862. --------D-2F120E-----------------------------
  4863. INT 2F U - DOS 3.0+ internal - MARK ALL DISK BUFFERS UNREFERENCED
  4864.     AX = 120Eh
  4865.     SS = DOS DS (must be using a DOS internal stack)
  4866. Return: DS:DI -> first disk buffer
  4867. Notes:    clears "referenced" flag on all disk buffers
  4868.     in DOS 5+, this has become essentially a NOP, invoking the same code
  4869.       used by AX=1224h (SHARING DELAY)
  4870. SeeAlso: AX=1209h,AX=1210h,INT 21/AH=0Dh
  4871. --------D-2F120F-----------------------------
  4872. INT 2F U - DOS 3.0+ internal - MAKE BUFFER MOST RECENTLY USED
  4873.     AX = 120Fh
  4874.     DS:DI -> disk buffer
  4875.     SS = DOS DS (must be using a DOS internal stack)
  4876. Return: DS:DI -> next buffer in buffer list
  4877. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  4878.       recently used is first); under DOS 3.3, the buffer is then moved to
  4879.       the start of the disk buffer chain if it was marked unused
  4880. Note:    this function is the same as AX=1207h except that it returns a
  4881.       pointer to the buffer following the specified buffer in the buffer
  4882.       chain
  4883. SeeAlso: AX=1207h
  4884. --------D-2F1210-----------------------------
  4885. INT 2F U - DOS 3.0+ internal - FIND UNREFERENCED DISK BUFFER
  4886.     AX = 1210h
  4887.     DS:DI -> first disk buffer to check
  4888. Return: ZF clear if found
  4889.         DS:DI -> first unreferenced disk buffer
  4890.     ZF set if not found
  4891. Note:    in DOS 5+, this has become essentially a NOP, invoking the same code
  4892.       used by AX=1224h (SHARING DELAY)
  4893. SeeAlso: AX=120Eh
  4894. --------D-2F1211-----------------------------
  4895. INT 2F U - DOS 3.0+ internal - NORMALIZE ASCIZ FILENAME
  4896.     AX = 1211h
  4897.     DS:SI -> ASCIZ filename to normalize
  4898.     ES:DI -> buffer for normalized filename
  4899. Return: destination buffer filled with uppercase filename, with slashes turned
  4900.     to backslashes
  4901. SeeAlso: AX=121Eh,AX=1221h
  4902. --------D-2F1212-----------------------------
  4903. INT 2F U - DOS 3.0+ internal - GET LENGTH OF ASCIZ STRING
  4904.     AX = 1212h
  4905.     ES:DI -> ASCIZ string
  4906. Return: CX = length of string
  4907. SeeAlso: AX=1225h
  4908. --------D-2F1213-----------------------------
  4909. INT 2F U - DOS 3.0+ internal - UPPERCASE CHARACTER
  4910.     AX = 1213h
  4911.     STACK: WORD character to convert to uppercase
  4912. Return: AL = uppercase character
  4913.     STACK unchanged
  4914. --------D-2F1214-----------------------------
  4915. INT 2F U - DOS 3.0+ internal - COMPARE FAR POINTERS
  4916.     AX = 1214h
  4917.     DS:SI = first pointer
  4918.     ES:DI = second pointer
  4919. Return: ZF set if pointers are equal, ZF clear if not equal
  4920.     CF clear if pointers equal, CF set if not
  4921. --------D-2F1215-----------------------------
  4922. INT 2F U - DOS 3.0+ internal - FLUSH BUFFER
  4923.     AX = 1215h
  4924.     DS:DI -> disk buffer
  4925.     SS = DOS DS (must be using a DOS internal stack)
  4926.     STACK: WORD drives for which to skip buffer
  4927.         ignore buffer if drive same as high byte, or bytes differ and
  4928.           the buffer is for a drive OTHER than that given in low byte
  4929. Return: STACK unchanged
  4930. Note:    can be called only from within DOS
  4931. SeeAlso: AX=1209h
  4932. --------D-2F1216-----------------------------
  4933. INT 2F U - DOS 3.0+ internal - GET ADDRESS OF SYSTEM FILE TABLE ENTRY
  4934.     AX = 1216h
  4935.     BX = system file table entry number
  4936. Return: CF clear if successful
  4937.         ES:DI -> system file table entry
  4938.         BX = relative entry number in system file table containing entry
  4939.         AX destroyed
  4940.     CF set if BX greater than FILES=
  4941. Note:    supported by DR DOS 5+
  4942. SeeAlso: AX=1220h
  4943. --------D-2F1217-----------------------------
  4944. INT 2F U - DOS 3.0+ internal - GET CURRENT DIRECTORY STRUCTURE FOR DRIVE
  4945.     AX = 1217h
  4946.     SS = DOS DS (must be using a DOS internal stack)
  4947.     STACK: WORD drive (0 = A:, 1 = B:, etc)
  4948. Return: CF set on error
  4949.         (drive > LASTDRIVE)
  4950.     CF clear if successful
  4951.         DS:SI -> current directory structure for specified drive
  4952.     STACK unchanged
  4953. SeeAlso: AX=1219h
  4954. --------D-2F1218-----------------------------
  4955. INT 2F U - DOS 3.0+ internal - GET CALLER'S REGISTERS
  4956.     AX = 1218h
  4957. Return: DS:SI -> saved caller's AX,BX,CX,DX,SI,DI,BP,DS,ES (on stack)
  4958. Note:    only valid while within DOS
  4959. --------D-2F1219-----------------------------
  4960. INT 2F U - DOS 3.0+ internal - SET DRIVE???
  4961.     AX = 1219h
  4962.     SS = DOS DS (must be using a DOS internal stack)
  4963.     STACK: WORD drive (0 = default, 1 = A:, etc)
  4964. Return: ???
  4965.     STACK unchanged
  4966. Notes:    calls AX=1217h
  4967.     builds a current directory structure if inside server call
  4968.       (INT 21/AX=5D00h)
  4969. SeeAlso: AX=1217h,AX=121Fh
  4970. --------D-2F121A-----------------------------
  4971. INT 2F U - DOS 3.0+ internal - GET FILE'S DRIVE
  4972.     AX = 121Ah
  4973.     DS:SI -> filename
  4974. Return: AL = drive (0 = default, 1 = A:, etc, FFh = invalid)
  4975.     DS:SI -> filename without leading X: (if present)
  4976. SeeAlso: INT 21/AH=19h,INT 21/AH=60h
  4977. --------D-2F121B-----------------------------
  4978. INT 2F U - DOS 3.0+ internal - SET YEAR/LENGTH OF FEBRUARY
  4979.     AX = 121Bh
  4980.     CL = year - 1980
  4981. Return: AL = number of days in February
  4982. Note:    requires DS to be set to the DOS data segment
  4983. SeeAlso: INT 21/AH=2Bh"DATE"
  4984. --------D-2F121C-----------------------------
  4985. INT 2F U - DOS 3.0+ internal - CHECKSUM MEMORY
  4986.     AX = 121Ch
  4987.     DS:SI -> start of memory to checksum
  4988.     CX = number of bytes
  4989.     DX = initial checksum
  4990.     SS = DOS DS (must be using a DOS internal stack)
  4991. Return: AX, CX destroyed
  4992.     DX = checksum
  4993.     DS:SI -> first byte after checksummed range
  4994. Notes:    used by DOS to determine day count since 1/1/80 given a date
  4995.     supported by DR DOS 5.0+
  4996. SeeAlso: AX=121Dh
  4997. --------D-2F121D-----------------------------
  4998. INT 2F U - DOS 3.0+ internal - SUM MEMORY
  4999.     AX = 121Dh
  5000.     DS:SI -> memory to add up
  5001.     CX = 0000h
  5002.     DX = limit
  5003. Return: AL = byte which exceeded limit
  5004.     CX = number of bytes before limit exceeded
  5005.     DX = remainder after adding first CX bytes
  5006.     DS:SI -> byte beyond the one which exceeded the limit
  5007. Notes:    used by DOS to determine year or month given day count since 1/1/80
  5008.     supported by DR DOS 5.0+
  5009. SeeAlso: AX=121Ch
  5010. --------D-2F121E-----------------------------
  5011. INT 2F U - DOS 3.0+ internal - COMPARE FILENAMES
  5012.     AX = 121Eh
  5013.     DS:SI -> first ASCIZ filename
  5014.     ES:DI -> second ASCIZ filename
  5015. Return: ZF set if filenames equivalent, ZF clear if not
  5016. Note:    supported by DR DOS 5.0+
  5017. SeeAlso: AX=1211h,AX=1221h
  5018. --------D-2F121F-----------------------------
  5019. INT 2F U - DOS 3.0+ internal - BUILD CURRENT DIRECTORY STRUCTURE
  5020.     AX = 121Fh
  5021.     SS = DOS DS (must be using a DOS internal stack)
  5022.     STACK: WORD drive letter
  5023. Return: ES:DI -> current directory structure (will be overwritten by next call)
  5024.     STACK unchanged
  5025. --------D-2F1220-----------------------------
  5026. INT 2F U - DOS 3.0+ internal - GET JOB FILE TABLE ENTRY
  5027.     AX = 1220h
  5028.     BX = file handle
  5029. Return: CF set on error
  5030.         AL = 6 (invalid file handle)
  5031.     CF clear if successful
  5032.         ES:DI -> JFT entry for file handle in current process
  5033. Notes:    the byte pointed at by ES:DI contains the number of the SFT for the
  5034.       file handle, or FFh if the handle is not open
  5035.     supported by DR DOS 5.0+
  5036. SeeAlso: AX=1216h,AX=1229h
  5037. --------D-2F1221-----------------------------
  5038. INT 2F U - DOS 3.0+ internal - CANONICALIZE FILE NAME
  5039.     AX = 1221h
  5040.     DS:SI -> file name to be fully qualified
  5041.     ES:DI -> 128-byte buffer for resulting canonical file name
  5042.     SS = DOS DS (must be using a DOS internal stack)
  5043. Return: (see INT 21/AH=60h)
  5044. Note:    identical to INT 21/AH=60h
  5045. SeeAlso: AX=1123h,INT 21/AH=60h
  5046. --------D-2F1222-----------------------------
  5047. INT 2F U - DOS 3.0+ internal - SET EXTENDED ERROR INFO
  5048.     AX = 1222h
  5049.     SS = DOS data segment
  5050.     SS:SI -> 4-byte records
  5051.         BYTE    error code, FFh = last record
  5052.         BYTE    error class, FFh = don't change
  5053.         BYTE    suggested action, FFh = don't change
  5054.         BYTE    error locus, FFh = don't change
  5055.     SDA error code set
  5056. Return: SI destroyed
  5057.     SDA error class, error locus, and suggested action fields set
  5058. Note:    can be called only from within DOS
  5059. SeeAlso: AX=122Dh,INT 21/AH=59h/BX=0000h,INT 21/AX=5D0Ah
  5060. --------D-2F1223-----------------------------
  5061. INT 2F U - DOS 3.0+ internal - CHECK IF CHARACTER DEVICE
  5062.     AX = 1223h
  5063.     DS = DOS DS
  5064.     SS = DOS DS (must be using a DOS internal stack)
  5065.     SDA+218h (DOS 3.10-3.30) = eight-character blank-padded name
  5066.     SDA+22Bh (DOS 4.0-6.0) = eight-character blank-padded name
  5067. Return: CF set if no character device by that name found
  5068.     CF clear if found
  5069.         BH = low byte of device attribute word
  5070. Note:    can only be called from within DOS
  5071. SeeAlso: INT 21/AX=5D06h,INT 21/AX=5D0Bh
  5072. --------D-2F1224-----------------------------
  5073. INT 2F U - DOS 3.0+ internal - SHARING RETRY DELAY
  5074.     AX = 1224h
  5075.     SS = DOS DS (must be using a DOS internal stack)
  5076. Return: after delay set by INT 21/AX=440Bh, unless in server call
  5077.       (INT 21/AX=5D00h)
  5078. Note:    delay is dependent on the processor speed, and is skipped entirely if
  5079.       inside a server call
  5080. SeeAlso: INT 21/AX=440Bh,INT 21/AH=52h,INT 62/AX=0097h
  5081. --------D-2F1225-----------------------------
  5082. INT 2F U - DOS 3.0+ internal - GET LENGTH OF ASCIZ STRING
  5083.     AX = 1225h
  5084.     DS:SI -> ASCIZ string
  5085. Return: CX = length of string
  5086. Note:    supported by DR DOS 5.0+
  5087. SeeAlso: AX=1212h
  5088. --------D-2F1226-----------------------------
  5089. INT 2F U - DOS 3.3+ internal - OPEN FILE
  5090.     AX = 1226h
  5091.     CL = access mode
  5092.     DS:DX -> ASCIZ filename
  5093.     SS = DOS DS (must be using a DOS internal stack)
  5094. Return: CF set on error
  5095.         AL = error code (see #1020 at INT 21/AH=59h/BX=0000h)
  5096.     CF clear if successful
  5097.         AX = file handle
  5098. Notes:    can only be called from within DOS
  5099.     equivalent to INT 21/AH=3Dh
  5100.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  5101. SeeAlso: AX=1227h,INT 21/AH=3Dh
  5102. --------D-2F1227-----------------------------
  5103. INT 2F U - DOS 3.3+ internal - CLOSE FILE
  5104.     AX = 1227h
  5105.     BX = file handle
  5106.     SS = DOS DS (must be using a DOS internal stack)
  5107. Return: CF set on error
  5108.         AL = 06h invalid file handle
  5109.     CF clear if successful
  5110. Notes:    can only be called from within DOS
  5111.     equivalent to INT 21/AH=3Eh
  5112.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  5113. SeeAlso: AX=1106h,AX=1201h,AX=1226h,INT 21/AH=3Eh
  5114. --------D-2F1228BP4200-----------------------
  5115. INT 2F U - DOS 3.3+ internal - MOVE FILE POINTER
  5116.     AX = 1228h
  5117.     BP = 4200h, 4201h, 4202h (see INT 21/AH=42h)
  5118.     BX = file handle
  5119.     CX:DX = offset in bytes
  5120.     SS = DOS DS (must be using a DOS internal stack)
  5121. Return: as for INT 21/AH=42h
  5122. Notes:    equivalent to INT 21/AH=42h, but may only be called from inside a DOS
  5123.       function call
  5124.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  5125.       LSEEK, and restores frame pointer
  5126.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  5127. SeeAlso: INT 21/AH=42h
  5128. --------D-2F1229-----------------------------
  5129. INT 2F U - DOS 3.3+ internal - READ FROM FILE
  5130.     AX = 1229h
  5131.     BX = file handle
  5132.     CX = number of bytes to read
  5133.     DS:DX -> buffer
  5134.     SS = DOS DS (must be using a DOS internal stack)
  5135. Return: as for INT 21/AH=3Fh"DOS"
  5136. Notes:    equivalent to INT 21/AH=3Fh, but may only be called when already inside
  5137.       a DOS function call
  5138.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  5139. SeeAlso: AX=1226h,INT 21/AH=3Fh"DOS"
  5140. --------D-2F122A-----------------------------
  5141. INT 2F U - DOS 3.3+ internal - SET FASTOPEN ENTRY POINT
  5142.     AX = 122Ah
  5143.     BX = entry point to set (0001h or 0002h)
  5144.     DS:SI -> FASTOPEN entry point (see #1945,#1946)
  5145.         (entry point not set if SI = FFFFh for DOS 4.0+)
  5146. Return: CF set if specified entry point already set
  5147. Notes:    entry point in BX is ignored under DOS 3.30
  5148.     both entry points set to same handler by DOS 4.01
  5149.     DOS 5.0 and 6.0 only set entry point 1
  5150.  
  5151. (Table 1945)
  5152. Values DOS 3.30+ FASTOPEN entry point is called with:
  5153.     AL = 01h  Lookup
  5154.         CX = ??? seems to be offset
  5155.         DI = ??? seems to be offset
  5156.         SI = offset in DOS DS of filename
  5157.     AL = 02h  insert file into FASTOPEN cache
  5158.     AL = 03h  delete file from FASTOPEN cache
  5159.         SI = offset in DOS DS of filename
  5160.     AL = 04h  purge FASTOPEN cache
  5161.         AH = subfunction (00h,01h,02h)
  5162.         ES:DI -> ???
  5163.         CX = ??? (subfunctions 01h and 02h only)
  5164. Returns: CF set on error or not installed
  5165. Note: function 03h calls function 01h first
  5166. SeeAlso: #1946,#1947
  5167.  
  5168. (Table 1946)
  5169. Values PC-DOS 4.01 FASTOPEN is additionally called with:
  5170.     AL = 04h ???
  5171.         AH = 03h
  5172.         ???
  5173.     AL = 05h ???
  5174.     AL = 0Bh ???
  5175.     AL = 0Ch ???
  5176.     AL = 0Dh ???
  5177.     AL = 0Eh ???
  5178.     AL = 0Fh ???
  5179.     AL = 10h ???
  5180. SeeAlso: #1945,#1947
  5181.  
  5182. (Table 1947)
  5183. Values MS-DOS 5.0-6.0 FASTOPEN is additionally called with:
  5184.     AL = 04h  purge FASTOPEN cache
  5185.         AH = 03h
  5186.         ???
  5187.     AL = 05h ???
  5188.         DL = drive (00h = A:)
  5189.         ???
  5190.     AL = 06h ???
  5191.         ???
  5192. SeeAlso: #1945,#1946
  5193. --------D-2F122B-----------------------------
  5194. INT 2F U - DOS 3.3+ internal - IOCTL
  5195.     AX = 122Bh
  5196.     BP = 44xxh
  5197.     SS = DOS DS (must be using a DOS internal stack)
  5198.     additional registers as appropriate for INT 21/AX=44xxh
  5199. Return: as for INT 21/AH=44h
  5200. Notes:    equivalent to INT 21/AH=44h, but may only be called when already inside
  5201.       a DOS function call
  5202.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  5203.       IOCTL, and restores frame pointer
  5204.     used by NLSFUNC in accessing COUNTRY.SYS when invoked by the DOS kernel
  5205. SeeAlso: INT 21/AH=44h
  5206. --------D-2F122C-----------------------------
  5207. INT 2F U - DOS 3.3+ internal - GET DEVICE CHAIN
  5208.     AX = 122Ch
  5209. Return: BX:AX -> header of second device driver (NUL is first) in driver chain
  5210. Note:    although this function exists in DR DOS 5.0 and Novell DOS 7, it
  5211.       always returns 0000h:0000h prior to Novell DOS 7 Update 15
  5212. SeeAlso: INT 21/AH=52h
  5213. --------D-2F122D-----------------------------
  5214. INT 2F U - DOS 3.3+ internal - GET EXTENDED ERROR CODE
  5215.     AX = 122Dh
  5216.     SS = DOS DS
  5217. Return: AX = current extended error code
  5218. SeeAlso: AX=1222h,INT 21/AH=59h/BX=0000h
  5219. --------D-2F122E-----------------------------
  5220. INT 2F U - DOS 4.0+ internal - GET OR SET ERROR TABLE ADDRESSES
  5221.     AX = 122Eh
  5222.     DL = subfunction
  5223.         00h get standard DOS error table (see #1948)
  5224.         Return: ES:DI -> error table
  5225.                  (DOS 4: errors 00h-12h,50h-5Bh)
  5226.                  (DOS 5: errors 00h-26h,4Fh,51h-59h)
  5227.         01h set standard DOS error table
  5228.         ES:DI -> error table
  5229.         02h get parameter error table (errors 00h-0Ah)
  5230.         Return: ES:DI -> error table
  5231.         03h set parameter error table
  5232.         ES:DI -> error table
  5233.         04h get critical/SHARE error table (errors 13h-2Bh)
  5234.         Return: ES:DI -> error table
  5235.         05h set critical/SHARE error table
  5236.         ES:DI -> error table
  5237.         06h get ??? error table
  5238.         Return: ES:DI -> error table or 0000h:0000h
  5239.         07h set ??? error table
  5240.         ES:DI -> error table
  5241.         08h get error message retriever (see #1949)
  5242.         Return: ES:DI -> FAR procedure to fetch error message
  5243.         09h set ??? error table
  5244.         ES:DI -> error table
  5245. Notes:    if the returned segment on a "get" is 0001h, then the offset specifies
  5246.       the offset of the error message table within COMMAND.COM, and the
  5247.       procedure returned by DL=08h should be called
  5248.     DOS 5+ COMMAND.COM does not allow setting any of the addresses (calls
  5249.       with DL odd are ignored); they are always returned with segment 0001h
  5250.     for DOS 5.0, the standard and critical/SHARE error tables are combined
  5251.       into a single error table
  5252. SeeAlso: AX=0500h,INT 21/AH=59h/BX=0000h
  5253.  
  5254. Format of DOS 4.x error table:
  5255. Offset    Size    Description    (Table 1948)
  5256.  00h    BYTE    FFh
  5257.  01h  2 BYTEs    04h,00h (DOS version???)
  5258.  03h    BYTE    number of error headers following
  5259.  04h 2N WORDs    table of all error headers for table
  5260.         Offset    Size    Description
  5261.          00h    WORD    error message number
  5262.          02h    WORD    offset of error message from start of header
  5263.                 error messages are count byte followed by msg
  5264. Note:    DOS 5 error tables consist of one word per error number; each word
  5265.       contains either the offset of a counted string or 0000h
  5266.  
  5267. (Table 1949)
  5268. Call error retrieval function with:
  5269.     AX = error number (see #1950)
  5270.     DI = offset of error table
  5271. Return: ES:DI -> error message (counted string)
  5272. Notes:    this function needs to access COMMAND.COM if the messages were not
  5273.       loaded into memory permanently with /MSG; the caller should assume
  5274.       that the returned message will be overwritten by the next call of
  5275.       the function
  5276.     supported by DR DOS 5.0
  5277.  
  5278. (Table 1950)
  5279. Values for parameter errors:
  5280.  01h    Too many parameters
  5281.  02h    Required Parameter missing
  5282.  03h    Invalid switch
  5283.  04h    Invalid keyword
  5284.  06h    Parameter value not in allowed range
  5285.  07h    Parameter value not allowed
  5286.  08h    Parameter value not allowed
  5287.  09h    Parameter format not correct
  5288.  0Ah    Invalid parameter
  5289.  0Bh    Invalid parameter combination
  5290. --------D-2F122F-----------------------------
  5291. INT 2F U - DOS 4.x internal - SET DOS VERSION NUMBER TO RETURN
  5292.     AX = 122Fh
  5293.     DX = DOS version number (0000h = return true DOS version)
  5294. Note:    not available under DR DOS 5.0 or 6.0
  5295. SeeAlso: INT 21/AH=30h,INT 21/AX=3306h
  5296. --------O-2F12FFBL00-------------------------
  5297. INT 2F - FreeDOS - FDAK-DDT - INSTALLATION CHECK / STATUS CHECK
  5298.     AX = 12FFh
  5299.     BL = 00h
  5300. Return: AL = DDh if installed
  5301.         BH = state (00h disabled, nonzero enabled)
  5302.         BL = readonly flag (00h writable, nonzero read-only)
  5303. Program: FDAK-DDT is the FreeDOS Alternative Kernel Device Drivers Testing
  5304.       release by Yury A. Semenov
  5305. SeeAlso: AX=12FFh/BL=07h
  5306. --------O-2F12FFBL01-------------------------
  5307. INT 2F - FreeDOS - FDAK-DDT - ENABLE FDAK DRIVERS
  5308.     AX = 12FFh
  5309.     BL = 01h
  5310. SeeAlso: AX=12FFh/BL=00h,AX=12FFh/BL=02h
  5311. --------O-2F12FFBL02-------------------------
  5312. INT 2F - FreeDOS - FDAK-DDT - DISABLE FDAK DRIVERS
  5313.     AX = 12FFh
  5314.     BL = 02h
  5315. SeeAlso: AX=12FFh/BL=00h,AX=12FFh/BL=01h
  5316. --------O-2F12FFBL03-------------------------
  5317. INT 2F - FreeDOS - FDAK-DDT - SWITCH BLOCK DEVICE TO READ-ONLY
  5318.     AX = 12FFh
  5319.     BL = 03h
  5320.     ???
  5321. SeeAlso: AX=12FFh/BL=00h,AX=12FFh/BL=04h
  5322. --------O-2F12FFBL04-------------------------
  5323. INT 2F - FreeDOS - FDAK-DDT - SWITCH BLOCK DEVICE TO READ-WRITE
  5324.     AX = 12FFh
  5325.     BL = 04h
  5326.     ???
  5327. SeeAlso: AX=12FFh/BL=00h,AX=12FFh/BL=03h
  5328. --------O-2F12FFBL05-------------------------
  5329. INT 2F - FreeDOS - FDAK-DDT - TURN ACTIVITY INDICATOR ON
  5330.     AX = 12FFh
  5331.     BL = 05h
  5332. Note:    not yet implemented as of January 1996
  5333. SeeAlso: AX=12FFh/BL=00h,AX=12FFh/BL=06h
  5334. --------O-2F12FFBL06-------------------------
  5335. INT 2F - FreeDOS - FDAK-DDT - TURN ACTIVITY INDICATOR OFF
  5336.     AX = 12FFh
  5337.     BL = 06h
  5338. Note:    not yet implemented as of January 1996
  5339. SeeAlso: AX=12FFh/BL=00h,AX=12FFh/BL=05h
  5340. --------O-2F12FFBL07-------------------------
  5341. INT 2F - FreeDOS - FDAK-DDT - UNINSTALL
  5342.     AX = 12FFh
  5343.     BL = 07h
  5344. Return: ES = segment of FDAK memory block
  5345. Note:    the caller must free the memory block returned in ES
  5346.       (via INT 21/AH=49h)
  5347. SeeAlso: AX=12FFh/BL=00h
  5348. --------m-2F12FFBX0006-----------------------
  5349. INT 2F U - DR DOS 6, Novell DOS 7 - EMM386.EXE - VIDEO MEMORY SPACE CONTROL
  5350.     AX = 12FFh
  5351.     BX = 0006h
  5352.     DX = 0000h
  5353.     CX = function
  5354.         0000h get status of video memory space (MEMMAX /V)
  5355.         0001h map memory into video memory space (MEMMAX +V)
  5356.         0002h unmap memory from video memory space (MEMMAX -V)
  5357. Return: CF clear if successful
  5358.         AX = 0000h (successful)
  5359.         BX = segment of reserved video RAM
  5360.         CX = segment of used video RAM
  5361.         DX = segment of first upper MCB
  5362. Notes:    this functionality is provided by EMM386, and partially supported by
  5363.       HIDOS.SYS
  5364.     BL specifies which program handles the call, BH is the function number
  5365. SeeAlso: AX=D201h/BX=4849h
  5366. --------O-2F12FFBX0000-----------------------
  5367. INT 2F U - Novell DOS 7 - GET ???
  5368.     AX = 12FFh
  5369.     BX = 0000h
  5370. Return: AX = 0000h if supported
  5371.     DX = ??? (internal data)
  5372. SeeAlso: AX=12FFh/BX=0001h
  5373. --------O-2F12FFBX0001-----------------------
  5374. INT 2F U - Novell DOS 7 - SET ???
  5375.     AX = 12FFh
  5376.     BX = 0001h
  5377.     DX = new value for ???
  5378. Return: AX = 0000h if supported
  5379. SeeAlso: AX=12FFh/BX=0000h
  5380. --------O-2F12FFBX0002-----------------------
  5381. INT 2F U - Novell DOS 7 - GET ??? SIZE
  5382.     AX = 12FFh
  5383.     BX = 0002h
  5384. Return: AX = 0000h if supported
  5385.     DX = size of/required-for ??? in paragraphs
  5386. SeeAlso: AX=12FFh/BX=0003h
  5387. --------O-2F12FFBX0003-----------------------
  5388. INT 2F U - Novell DOS 7 - SET ???
  5389.     AX = 12FFh
  5390.     BX = 0003h
  5391.     DX = new value for ???
  5392. Return: AX = 0000h if supported
  5393. SeeAlso: AX=12FFh/BX=0002h
  5394. --------O-2F12FFBX0007-----------------------
  5395. INT 2F U - Novell DOS 7 - SCRIPT.EXE - GET ???
  5396.     AX = 12FFh
  5397.     BX = 0007h
  5398.     CX = 0000h
  5399. Return: CF clear if installed
  5400.         AX = 0000h
  5401.         BX = ??? (4426h)
  5402.         CX = ??? (0068h)
  5403.         DX = PSP segment of resident code???
  5404.         SI = ??? (4AFAh)
  5405.         ES = resident code segment
  5406. --------O-2F12FFBX0009-----------------------
  5407. INT 2F U - Novell DOS 7 - SET ???
  5408.     AX = 12FFh
  5409.     BX = 0009h
  5410.     DX = new value for ???
  5411. Return: ???
  5412. Note:    the DX value is stored at offset 66h in SYSVARS and offset 18h in
  5413.       the Novell DOS 7 internal variable table
  5414. --------m-2F12FFBX0106-----------------------
  5415. INT 2F U - Novell DOS 7 - EMM386.EXE - GET VERSION???
  5416.     AX = 12FFh
  5417.     BX = 0106h
  5418. Return: CF clear if successful
  5419.         AX = 0000h (successful)
  5420.         BX = EDC0h (signature)
  5421.         CL = memory manager variant (02h,03h)
  5422.         (02h when DPMI/VCPI disabled, 03h when DPMI/VCPI loaded)
  5423.         CH = ??? (00h)
  5424.         DX = version??? (0300h for v3.0)
  5425.         ES = segment of EMM386 low-memory stub
  5426. Notes:    BL specifies which program handles the call, BH is the function number
  5427.     if the word at ES:0012h is nonzero, if contains the offset within
  5428.       segment ES of the CEMM-compatible entry point (see #1951)
  5429.     if no other program has hooked INT 67, an alternate installation
  5430.       check is to test for the string
  5431.       "NOVELL EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67
  5432.       handler's segment; the word immediately preceding this string
  5433.       contains the offset of the API entry point if it is nonzero
  5434. Index:    entry point;Novell EMM386
  5435.  
  5436. (Table 1951)
  5437. Call Novell EMM386.EXE entry point with:
  5438.     AH = 00h get memory manager's status???
  5439.         ???
  5440.     AH = 01h set memory manager's status???
  5441.         ???
  5442.     AH = 02h Weitek coprocessor support???
  5443.         AL = subfunction???
  5444.     more functions???
  5445. SeeAlso: #0855 at INT 21/AX=4402h/SF=02h,#2915 at INT 67/AX=FFA5h
  5446. --------m-2F12FFBL06-------------------------
  5447. INT 2F U - Novell DOS 7 - EMM386.EXE - ???
  5448.     AX = 12FFh
  5449.     BL = 06h
  5450.     BH = function (02h-09h)
  5451.     ???
  5452. Return: ???
  5453. --------O-2F12FFBX0EDC-----------------------
  5454. INT 2F U - Novell DOS 7 - EMM386.EXE - CHECK IF MULTITASKING SUPPORT LOADED???
  5455.     AX = 12FFh
  5456.     BX = 0EDCh ('EDC' = Novell European Development Center)
  5457. Return: AX = 0000h if ??? loaded
  5458.         CF clear
  5459.         BX = 0000h
  5460. Notes:    called by Novell DOS 7 TaskMgr
  5461.     if this function returns with AX=0000h, then the code necessary to
  5462.       support the API on INT 2F/AX=2780h is loaded and that API becomes
  5463.       available for use
  5464.     because the request is handled on the initial trap to the memory
  5465.       manager caused by INT instructions, this function must be invoked
  5466.       with an actual INT 2F instruction instead of some simulation such
  5467.       as a far call to the address in the interrupt vector table
  5468. SeeAlso: AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h,AX=2780h/CL=04h
  5469. --------D-2F13-------------------------------
  5470. INT 2F U - DOS 3.2+ - SET DISK INTERRUPT HANDLER
  5471.     AH = 13h
  5472.     DS:DX -> interrupt handler disk driver calls on read/write
  5473.     ES:BX = address to restore INT 13 to on system halt (exit from root
  5474.          shell) or warm boot (INT 19)
  5475. Return: DS:DX set by previous invocation of this function
  5476.     ES:BX set by previous invocation of this function
  5477. Notes:    IO.SYS hooks INT 13 and inserts one or more filters ahead of the
  5478.       original INT 13 handler.  The first is for disk change detection
  5479.       on floppy drives, the second is for tracking formatting calls and
  5480.       correcting DMA boundary errors, the third is for working around
  5481.       problems in a particular version of IBM's ROM BIOS
  5482.     before the first call, ES:BX points at the original BIOS INT 13; DS:DX
  5483.       also points there unless IO.SYS has installed a special filter for
  5484.       hard disk reads (on systems with model byte FCh and BIOS date
  5485.       "01/10/84" only), in which case it points at the special filter
  5486.     most DOS 3.2+ disk access is via the vector in DS:DX, although a few
  5487.       functions are still invoked via an INT 13 instruction
  5488.     this is a dangerous security loophole for any virus-monitoring software
  5489.       which does not trap this call ("INT13", "Nomenklatura", and many
  5490.       Bulgarian viruses are known to use it to get the original ROM entry
  5491.       point)
  5492. SeeAlso: INT 13/AH=01h,INT 19,INT 9D"VIRUS"
  5493. --------N-2F13-------------------------------
  5494. INT 2F U - MS-NET - ???
  5495.     AH = 13h
  5496.     ???
  5497. Return: ???
  5498. Note:    supposedly used to move (or control the movement of) NCBs
  5499. --------U-2F1400-----------------------------
  5500. INT 2F C - NLSFUNC.COM - INSTALLATION CHECK
  5501.     AX = 1400h
  5502. Return: AL = 00h not installed, OK to install
  5503.          01h not installed, not OK
  5504.          FFh installed
  5505. Notes:    this function is called by the DOS v3.3+ kernel
  5506.     supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  5507.     supported by DR DOS 5.0
  5508.     documented for MS-DOS 5+, but undocumented in prior versions
  5509. SeeAlso: AX=1401h"NLSFUNC",AX=1402h"NLSFUNC"
  5510. --------D-2F1400-----------------------------
  5511. INT 2F - European MS-DOS 4.0 POPUP - "CheckPu" - INSTALLATION CHECK
  5512.     AX = 1400h
  5513. Return: AX = FFFFh if installed
  5514.         BX = maximum memory required to save screen and keyboard info
  5515.     CF clear if successful
  5516.     CF set on error
  5517.         AX = error code
  5518.         0002h invalid function
  5519.         0004h unknown error
  5520. Note:    the POPUP interface is used by background programs (see INT 21/AH=80h)
  5521.       to communicate with the user
  5522. SeeAlso: AX=1401h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  5523. --------U-2F1401-----------------------------
  5524. INT 2F CU - NLSFUNC.COM - CHANGE CODE PAGE
  5525.     AX = 1401h
  5526.     DS:SI -> internal code page structure (see #1952)
  5527.     BX = new code page (see #1099 at INT 21/AX=6602h)
  5528.     DX = country code???
  5529. Return: AL = status
  5530.          00h successful
  5531.          else DOS error code
  5532. Note:    this function is called by the DOS v3.3+ kernel
  5533. SeeAlso: AX=1400h"NLSFUNC",AX=1402h"NLSFUNC",INT 21/AH=66h
  5534.  
  5535. Format of DOS 3.30 internal code page structure:
  5536. Offset    Size    Description    (Table 1952)
  5537.  00h  8 BYTEs    ???
  5538.  08h 64 BYTEs    name of country information file
  5539.  48h    WORD    system code page (see #1099 at INT 21/AX=6602h)
  5540.  4Ah    WORD    number of supported subfunctions
  5541.  4Ch  5 BYTEs    data to return for INT 21/AX=6502h
  5542.  51h  5 BYTEs    data to return for INT 21/AX=6504h
  5543.  56h  5 BYTEs    data to return for INT 21/AX=6505h
  5544.  5Bh  5 BYTEs    data to return for INT 21/AX=6506h
  5545.  60h 41 BYTEs    data to return for INT 21/AX=6501h
  5546. --------D-2F1401-----------------------------
  5547. INT 2F - European MS-DOS 4.0 POPUP - "PostPu" - OPEN/CLOSE POPUP SCREEN
  5548.     AX = 1401h
  5549.     DL = function (00h open, 01h close)
  5550.     DH = wait flag
  5551.         00h block until screen opens
  5552.         01h return error if screen is not available
  5553.         02h urgent--always open screen immediately
  5554. Return: CF clear if successful
  5555.         BX = amount of memory needed to save screen and keyboard info,
  5556.         0000h if default save location can be used (only if DH was 02h)
  5557.     CF set on error
  5558. Note:    the application using the screen is frozen until the popup screen is
  5559.       closed
  5560. SeeAlso: AX=1400h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  5561. --------U-2F1402-----------------------------
  5562. INT 2F CU - NLSFUNC.COM - GET EXTENDED COUNTRY INFO
  5563.     AX = 1402h
  5564.     BP = subfunction (same as AL for INT 21/AH=65h)
  5565.     BX = code page (see #1099 at INT 21/AX=6602h)
  5566.     DX = country code (see #0747 at INT 21/AH=38h)
  5567.     DS:SI -> internal code page structure (see #1952)
  5568.     ES:DI -> user buffer
  5569.     CX = size of user buffer
  5570. Return: AL = status
  5571.         00h successful
  5572.         else DOS error code
  5573. Notes:    this function is called by the DOS v3.3+ kernel on INT 21/AH=65h
  5574.     code page structure apparently only needed for COUNTRY.SYS pathname
  5575. SeeAlso: AX=1401h"NLSFUNC",AX=1403h"NLSFUNC",AX=1404h,INT 21/AH=65h
  5576. --------D-2F1402-----------------------------
  5577. INT 2F - European MS-DOS 4.0 POPUP - "SavePu" - SAVE POPUP SCREEN
  5578.     AX = 1402h
  5579.     ES:DI -> save buffer (0000h:0000h for default buffer in POPUP)
  5580. Return: CF clear if successful
  5581.     CF set on error
  5582.         AX = error code (see #1953)
  5583. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1403h"POPUP"
  5584.  
  5585. (Table 1953)
  5586. Values for POPUP error code:
  5587.  0001h    process does not own screen
  5588.  0004h    unknown error
  5589.  0005h    invalid pointer
  5590. --------U-2F1403-----------------------------
  5591. INT 2F CU - NLSFUNC.COM - SET CODE PAGE
  5592.     AX = 1403h
  5593.     DS:SI -> internal code page structure (see #1952)
  5594.     BX = code page (see #1099 at INT 21/AX=6602h)
  5595.     DX = country code (see #0747 at INT 21/AH=38h)
  5596. Return: AL = status
  5597.          ???
  5598. Note:    this function is called by the DOS v3.3+ kernel on INT 21/AH=38h
  5599. SeeAlso: AX=1402h"NLSFUNC",AX=1404h,INT 21/AH=38h"SET"
  5600. --------D-2F1403-----------------------------
  5601. INT 2F - European MS-DOS 4.0 POPUP - "RestorePu" - RESTORE SCREEN
  5602.     AX = 1403h
  5603.     ES:DI -> buffer containing saved screen
  5604.         (0000h:0000h for default buffer in POPUP)
  5605. Return: CF clear if successful
  5606.     CF set on error
  5607.         AX = error code (see #1953)
  5608. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1402h"POPUP"
  5609. --------U-2F1404-----------------------------
  5610. INT 2F CU - NLSFUNC.COM - GET COUNTRY INFO
  5611.     AX = 1404h
  5612.     BX = code page (see #1099 at INT 21/AX=6602h)
  5613.     DX = country code (see #0747 at INT 21/AH=38h)
  5614.     DS:SI -> internal code page structure (see #1952)
  5615.     ES:DI -> user buffer
  5616. Return: AL = status
  5617.          ???
  5618. Notes:    this function is called by the DOS v3.3+ kernel on INT 21/AH=38h
  5619.     code page structure apparently only needed for COUNTRY.SYS pathname
  5620. SeeAlso: AX=1402h,AX=1403h,INT 21/AH=38h"GET"
  5621. --------U-2F14FE-----------------------------
  5622. INT 2F U - DR DOS 5.0 NLSFUNC - GET EXTENDED COUNTRY INFORMATION
  5623.     AX = 14FEh
  5624.     BX = code page (FFFFh=global code page) (see #1099 at INT 21/AX=6602h)
  5625.     DX = country ID (FFFFh=current country) (see #0747 at INT 21/AH=38h)
  5626.     ES:DI -> country information buffer
  5627.     CL = info ID
  5628.         01h get general internationalization info
  5629.         02h get pointer to uppercase table
  5630.         04h get pointer to filename uppercase table
  5631.         05h get pointer to filename terminator table
  5632.         06h get pointer to collating sequence table
  5633.         07h get pointer to Double-Byte Character Set table
  5634.     CF set (used to return error if not installed)
  5635. Return: CF clear if successful
  5636.         DS:SI -> requested information
  5637.     CF set on error
  5638. Notes:    DR DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  5639.       or FFh on entry.
  5640.     the DR DOS kernel calls this function on INT 21/AX=6501h
  5641.     the value in CL is not range-checked by the DR DOS 5.0 NLSFUNC
  5642. SeeAlso: #1954,AX=14FFh,INT 21/AH=65h
  5643.  
  5644. Format of DR DOS COUNTRY.SYS file:
  5645. Offset    Size    Description    (Table 1954)
  5646.  00h 126 BYTEs    copyright notice (terminated with Ctrl-Z, padded with NULs)
  5647.  7Eh    WORD    signature EDC1h
  5648.  80h    var    country pointer records
  5649.     Offset    Size    Description
  5650.      00h    WORD    country code (0000h if end of array)
  5651.      02h    WORD    code page (see #1099 at INT 21/AX=6602h)
  5652.      04h    WORD    ??? (0000h)
  5653.      06h  7 WORDs    offsets in file for data tables for subfunctions
  5654.               01h-07h
  5655.  var    var    country information
  5656. --------U-2F14FF-----------------------------
  5657. INT 2F U - DR DOS 5.0 NLSFUNC - PREPARE CODE PAGE
  5658.     AX = 14FFh
  5659.     BX = code page (see #1099 at INT 21/AX=6602h)
  5660. Return: AX = ???
  5661.     ZF set if AX=0000h
  5662. Notes:    DR DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  5663.       or FFh on entry.
  5664.     passes codepage preparation request to each character device supporting
  5665.       the generic IOCTL call
  5666. SeeAlso: AX=14FEh,INT 21/AX=440Ch,INT 21/AX=6602h
  5667. --------U-2F1500-----------------------------
  5668. INT 2F - DOS 4.00 GRAPHICS.COM - INSTALLATION CHECK
  5669.     AX = 1500h
  5670. Return: AX = FFFFh
  5671.     ES:DI -> ??? (graphics data?)
  5672. Note:    this installation check conflicts with the CD-ROM Extensions
  5673.       installation check; moved to AX=AC00h in later versions
  5674. SeeAlso: AX=AC00h
  5675. --------d-2F1500BX0000-----------------------
  5676. INT 2F - CD-ROM - INSTALLATION CHECK
  5677.     AX = 1500h
  5678.     BX = 0000h
  5679. Return: BX = number of CD-ROM drive letters used
  5680.     CX = starting drive letter (0=A:)
  5681. Notes:    this installation check DOES NOT follow the format used by other
  5682.       software
  5683.     this installation check conflicts with the DOS 4.00 GRAPHICS.COM
  5684.       installation check
  5685. BUG:    this function may return an incorrect starting drive letter when
  5686.       INTERLNK is installed
  5687. SeeAlso: AX=150Ch,AX=15FFh,INT 2F/AX=D000h"Lotus"
  5688. --------c-2F1500CH90-------------------------
  5689. INT 2F U - CDBLITZ v2.11 - INSTALLATION CHECK
  5690.     AX = 1500h
  5691.     CH = 90h (function number)
  5692.     BX = 1234h (magic value for CDBLITZ)
  5693. Return: CX = 1234h if installed
  5694.         CF clear
  5695.         DX = BCD version number (DH = major, DL = minor)
  5696. Program: CDBLITZ is a CD-ROM cache by Blitz 'n' Software, Inc.
  5697. SeeAlso: AX=1500h/CH=99h
  5698. --------c-2F1500CH91-------------------------
  5699. INT 2F U - CDBLITZ v2.11 - GET STATISTICS
  5700.     AX = 1500h
  5701.     CH = 91h (function number)
  5702.     BX = 1234h (magic value for CDBLITZ)
  5703. Return: CF clear
  5704.     ES:BX -> statistics record (see #1955)
  5705. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=97h
  5706.  
  5707. Format of CDBLITZ statistics record:
  5708. Offset    Size    Description    (Table 1955)
  5709.  00h    WORD    cache mode (see also AX=1500h/CH=94h)
  5710.         0001h 'min', 0002h 'max'
  5711.  02h    DWORD    number of read calls???
  5712.  06h    DWORD    total number of sectors read
  5713.  0Ah    DWORD    unused??? (zero)
  5714.  0Eh    DWORD    number of cache hit sectors
  5715.  12h    WORD    cache size in KB
  5716.  14h    WORD    unused??? (zero)
  5717.  16h    WORD    cache state (0000h disabled, 0001h enabled)
  5718. --------c-2F1500CH92-------------------------
  5719. INT 2F U - CDBLITZ v2.11 - ENABLE CACHE
  5720.     AX = 1500h
  5721.     CH = 92h (function number)
  5722.     BX = 1234h (magic value for CDBLITZ)
  5723. Return: CF clear
  5724. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=93h,AX=1500h/CH=94h
  5725. --------c-2F1500CH93-------------------------
  5726. INT 2F U - CDBLITZ v2.11 - DISABLE CACHE
  5727.     AX = 1500h
  5728.     CH = 93h (function number)
  5729.     BX = 1234h (magic value for CDBLITZ)
  5730. Return: CF clear
  5731. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=92h,AX=1500h/CH=95h
  5732. --------c-2F1500CH94-------------------------
  5733. INT 2F U - CDBLITZ v2.11 - SET 'MAX' MODE (CACHE BOTH DIRECTORIES AND DATA)
  5734.     AX = 1500h
  5735.     CH = 94h (function number)
  5736.     BX = 1234h (magic value for CDBLITZ)
  5737. Return: CF clear
  5738. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=92h,AX=1500h/CH=95h
  5739. --------c-2F1500CH95-------------------------
  5740. INT 2F U - CDBLITZ v2.11 - SET 'MIN' MODE (CACHE ONLY DIRECTORY ENTRIES)
  5741.     AX = 1500h
  5742.     CH = 95h (function number)
  5743.     BX = 1234h (magic value for CDBLITZ)
  5744. Return: CF clear
  5745. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=94h
  5746. --------c-2F1500CH96-------------------------
  5747. INT 2F U - CDBLITZ v2.11 - FLUSH CACHE
  5748.     AX = 1500h
  5749.     CH = 96h (function number)
  5750.     BX = 1234h (magic value for CDBLITZ)
  5751. Return: CF clear
  5752. Note:    this function resets the counts for number of sectors read and number
  5753.       of cache hits, but no other values in the statistics record
  5754.       (see #1955)
  5755. SeeAlso: AX=1500h/CH=90h
  5756. --------c-2F1500CH97-------------------------
  5757. INT 2F U - CDBLITZ v2.11 - GET CACHE STATISTICS
  5758.     AX = 1500h
  5759.     CH = 97h (function number)
  5760.     BX = 1234h (magic value for CDBLITZ)
  5761. Return: CF clear
  5762.     AL = cache mode (01h 'min', 02h 'max') (see also AX=1500h/CH=94h)
  5763.     AH = cache state (00h disabled, 01h enabled)
  5764.     BX = cache size in KB
  5765.     DX:CX = total number of reads
  5766.     DI:SI = number of cache hits
  5767. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=91h
  5768. --------c-2F1500CH99-------------------------
  5769. INT 2F U - CDBLITZ v2.11 - UNINSTALL
  5770.     AX = 1500h
  5771.     CH = 99h (function number)
  5772.     BX = 1234h (magic value for CDBLITZ)
  5773. Return: CF clear
  5774.     ???
  5775. Program: CDBLITZ is a CD-ROM cache by Blitz 'n' Software, Inc.
  5776. SeeAlso: AX=1500h/CH=90h
  5777. --------d-2F1501-----------------------------
  5778. INT 2F - CD-ROM - GET DRIVE DEVICE LIST
  5779.     AX = 1501h
  5780.     ES:BX -> buffer to hold drive letter list (5 bytes per drive letter)
  5781. Return: buffer filled, for each drive letter
  5782.       BYTE    subunit number in driver
  5783.       DWORD address of device driver header (see #0987)
  5784. Note:    reportedly returns AX=0000h and an invalid address under Windows95
  5785. SeeAlso: AX=1510h
  5786. --------d-2F1502-----------------------------
  5787. INT 2F - CD-ROM - GET COPYRIGHT FILE NAME
  5788.     AX = 1502h
  5789.     ES:BX -> 38-byte buffer for name of copyright file
  5790.     CX = drive number (0=A:)
  5791. Return: CF set if drive is not a CD-ROM drive
  5792.         AX = 000Fh (invalid drive)
  5793.     CF clear if successful
  5794. SeeAlso: AX=1503h
  5795. --------d-2F1503-----------------------------
  5796. INT 2F - CD-ROM - GET ABSTRACT FILE NAME
  5797.     AX = 1503h
  5798.     ES:BX -> 38-byte buffer for name of abstract file
  5799.     CX = drive number (0=A:)
  5800. Return: CF set if drive is not a CD-ROM drive
  5801.         AX = 000Fh (invalid drive)
  5802.     CF clear if successful
  5803. SeeAlso: AX=1502h,AX=1504h
  5804. --------d-2F1504-----------------------------
  5805. INT 2F - CD-ROM - GET BIBLIOGRAPHIC DOC FILE NAME
  5806.     AX = 1504h
  5807.     ES:BX -> 38-byte buffer for name of bibliographic documentation file
  5808.     CX = drive number (0=A:)
  5809. Return: CF set if drive is not a CD-ROM drive
  5810.         AX = 000Fh (invalid drive)
  5811.     CF clear if successful
  5812. SeeAlso: AX=1502h,AX=1503h
  5813. --------d-2F1505-----------------------------
  5814. INT 2F - CD-ROM - READ VTOC
  5815.     AX = 1505h
  5816.     ES:BX -> 2048-byte buffer
  5817.     CX = drive number (0=A:)
  5818.     DX = sector index (0=first volume descriptor,1=second,...)
  5819. Return: CF set on error
  5820.         AX = error code (15=invalid drive,21=not ready)
  5821.     CF clear if successful
  5822.         AX = volume descriptor type (1=standard,FFh=terminator,0=other)
  5823. Note:    This function was not supported by Novell DOS 7 NWCDEX prior to the
  5824.       08/16/94 update
  5825. --------d-2F1506-----------------------------
  5826. INT 2F - CD-ROM - TURN DEBUGGING ON
  5827.     AX = 1506h
  5828.     BX = debugging function to enable
  5829. Note:    reserved for development
  5830. SeeAlso: AX=1507h
  5831. --------d-2F1507-----------------------------
  5832. INT 2F - CD-ROM - TURN DEBUGGING OFF
  5833.     AX = 1507h
  5834.     BX = debugging function to disable
  5835. Note:    reserved for development
  5836. SeeAlso: AX=1506h
  5837. --------d-2F1508-----------------------------
  5838. INT 2F - CD-ROM - ABSOLUTE DISK READ
  5839.     AX = 1508h
  5840.     ES:BX -> buffer
  5841.     CX = drive number (0=A:)
  5842.     SI:DI = starting sector number
  5843.     DX = number of sectors to read
  5844. Return: CF set on error
  5845.         AL = error code (0Fh invalid drive,15h not ready)
  5846.     CF clear if successful
  5847. Note:    reportedly returns error 15h (not ready) under Windows95
  5848. SeeAlso: AX=1509h
  5849. --------d-2F1509-----------------------------
  5850. INT 2F - CD-ROM - ABSOLUTE DISK WRITE
  5851.     AX = 1509h
  5852.     ES:BX -> buffer
  5853.     CX = drive number (0=A:)
  5854.     SI:DI = starting sector number
  5855.     DX = number of sectors to write
  5856. Note:    corresponds to INT 26h and is currently reserved and nonfunctional
  5857. SeeAlso: AX=1508h
  5858. --------d-2F150A-----------------------------
  5859. INT 2F - CD-ROM - RESERVED
  5860.     AX = 150Ah
  5861. --------d-2F150B-----------------------------
  5862. INT 2F - CD-ROM v2.00+ - DRIVE CHECK
  5863.     AX = 150Bh
  5864.     CX = drive number (0=A:)
  5865. Return: BX = ADADh if MSCDEX.EXE installed
  5866.         AX = support status
  5867.         0000h if drive not supported
  5868.         nonzero if supported
  5869. SeeAlso: AX=150Dh
  5870. --------d-2F150C-----------------------------
  5871. INT 2F - CD-ROM v2.00+ - GET MSCDEX.EXE VERSION (GET VERSION)
  5872.     AX = 150Ch
  5873. Return: BH = major version
  5874.     BL = minor version
  5875. Notes:    MSCDEX.EXE versions prior to 2.00 return BX=0000h
  5876.     Corel's CORELCDX.COM v1.01d returns 2.20, v1.12a returns 2.21
  5877.     Meridian Data's CDNETEX.EXE returns its own version number, e.g. 4.70
  5878.     Windows95 returns v2.95
  5879. SeeAlso: AX=1500h"CD-ROM"
  5880. --------d-2F150D-----------------------------
  5881. INT 2F - CD-ROM v2.00+ - GET CD-ROM DRIVE LETTERS
  5882.     AX = 150Dh
  5883.     ES:BX -> buffer for drive letter list (1 byte per drive)
  5884. Return: buffer filled with drive numbers (0=A:).  Each byte corresponds
  5885.     to the drive in the same position for function 1501h
  5886. SeeAlso: AX=150Bh
  5887. --------d-2F150E-----------------------------
  5888. INT 2F - CD-ROM v2.00+ - GET/SET VOLUME DESCRIPTOR PREFERENCE
  5889.     AX = 150Eh
  5890.     BX = subfunction
  5891.         00h get preference
  5892.         DX = 0000h
  5893.         Return: DX = preference settings
  5894.         01h set preference
  5895.         DH = volume descriptor preference
  5896.             01h = primary volume descriptor
  5897.             02h = supplementary volume descriptor
  5898.         DL = supplementary volume descriptor preference
  5899.             01h = shift-Kanji
  5900.     CX = drive number (0=A:)
  5901. Return: CF set on error
  5902.         AX = error code (15=invalid drive,1=invalid function)
  5903.     CF clear if successful
  5904. --------d-2F150F-----------------------------
  5905. INT 2F - CD-ROM v2.00+ - GET DIRECTORY ENTRY
  5906.     AX = 150Fh
  5907.     CL = drive number (0=A:)
  5908.     CH bit 0 = copy flag
  5909.         clear if direct copy
  5910.         set if copy to structure which removes ISO/High Sierra diffs
  5911.     ES:BX -> ASCIZ path name
  5912.     SI:DI -> buffer for directory entry (see #1956,#1957)
  5913.          minimum 255 bytes for direct copy
  5914. Return: CF set on error
  5915.         AX = error code
  5916.     CF clear if successful
  5917.         AX = disk format (0=High Sierra,1=ISO 9660)
  5918. Note:    this function was not supported by Novell DOS 7 NWCDEX prior to the
  5919.       08/16/94 update
  5920.  
  5921. Format of CD-ROM directory entry (direct copy):
  5922. Offset    Size    Description    (Table 1956)
  5923.  00h    BYTE    length of directory entry
  5924.  01h    BYTE    length of XAR in Logical Block Numbers
  5925.  02h    DWORD    LBN of data, Intel (little-endian) format
  5926.  06h    DWORD    LBN of data, Motorola (big-endian) format
  5927.  0Ah    DWORD    length of file, Intel format
  5928.  0Eh    DWORD    length of file, Motorola format
  5929. ---High Sierra---
  5930.  12h  6 BYTEs    date and time
  5931.  18h    BYTE    bit flags
  5932.  19h    BYTE    reserved
  5933. ---ISO 9660---
  5934.  12h  7 BYTEs    date and time
  5935.         (seventh byte is offset from GMT in 15-minute increments)
  5936.  19h    BYTE    bit flags
  5937. ---both formats---
  5938.  1Ah    BYTE    interleave size
  5939.  1Bh    BYTE    interleave skip factor
  5940.  1Ch    WORD    volume set sequence number, Intel format
  5941.  1Eh    WORD    volume set sequence number, Motorola format
  5942.  20h    BYTE    length of file name
  5943.  21h  N BYTEs    file name
  5944.     BYTE    (optional) padding if filename is odd length
  5945.       N BYTEs    system data
  5946. SeeAlso: #1957,#0700
  5947.  
  5948. Format of CD-ROM directory entry (canonicalized):
  5949. Offset    Size    Description    (Table 1957)
  5950.  00h    BYTE    length of XAR in Logical Block Numbers
  5951.  01h    DWORD    Logical Block Number of file start
  5952.  05h    WORD    size of disk in logical blocks
  5953.  07h    DWORD    file length in bytes
  5954.  0Bh  7 BYTEs    date and time
  5955.  12h    BYTE    bit flags
  5956.  13h    BYTE    interleave size
  5957.  14h    BYTE    interleave skip factor
  5958.  15h    WORD    volume set sequence number
  5959.  17h    BYTE    length of file name
  5960.  18h 38 BYTEs    ASCIZ filename
  5961.  3Eh    WORD    file version number
  5962.  40h    BYTE    number of bytes of system use data
  5963.  41h 220 BYTEs    system use data
  5964. SeeAlso: #1956
  5965. --------d-2F1510-----------------------------
  5966. INT 2F - CD-ROM v2.10+ - SEND DEVICE DRIVER REQUEST
  5967.     AX = 1510h
  5968.     CX = CD-ROM drive letter (0 = A, 1 = B, etc)
  5969.     ES:BX -> CD-ROM device driver request header (see #1931 at AX=0802h)
  5970. Note:    MSCDEX initializes the device driver request header's subunit field
  5971.       based on the drive number specified in CX
  5972. BUG:    Novell DOS 7 NWCDEX prior to the 12/13/94 update did not initialize
  5973.       the subunit field
  5974. SeeAlso: AX=0802h
  5975. --------d-2F15FFBX0000-----------------------
  5976. INT 2F - CD-ROM - CORELCDX - INSTALLATION CHECK
  5977.     AX = 15FFh
  5978.     BX = 0000h
  5979. Return: BX = ABCDh if CORELCDX loaded
  5980. Note:    Corel's CORELCDX.COM is a replacement for MSCDEX.EXE; it also supports
  5981.       the standard MSCDEX installation check calls AX=1500h and AX=150Ch
  5982. SeeAlso: AX=1500h"CD-ROM",AX=150Ch
  5983. --------W-2F1600-----------------------------
  5984. INT 2F - MS Windows - WINDOWS ENHANCED MODE INSTALLATION CHECK
  5985.     AX = 1600h
  5986. Return: AL = status
  5987.         00h neither Windows 3.x enhanced mode nor Windows/386 2.x running
  5988.         01h Windows/386 2.x running
  5989.         80h XMS version 1 driver installed (neither Windows 3.x enhanced
  5990.           mode nor Windows/386 2.x running) (obsolete--see note)
  5991.         FFh Windows/386 2.x running
  5992.     AL = anything else
  5993.         AL = Windows major version number >= 3
  5994.         AH = Windows minor version number
  5995. Notes:    INT 2F/AH=16h comprises an API for non-Windows programs (DOS device
  5996.       drivers, TSRs, and applications) to cooperate with multitasking
  5997.       Windows/386 2.x and Windows 3.x and higher enhanced mode.
  5998.     certain calls are also supported in the Microsoft 80286 DOS extender in
  5999.       Windows standard mode
  6000.     this function served as the installation check and AX=1610h served to
  6001.       get the driver entry point for XMS version 1, which is now obsolete.
  6002.       Use AX=4300h and AX=4310h instead
  6003. SeeAlso: AX=160Ah,AX=1610h,AX=4300h,AX=4680h
  6004. Index:    installation check;XMS version 1
  6005. --------W-2F1602-----------------------------
  6006. INT 2F - MS Windows/386 2.x - GET API ENTRY POINT
  6007.     AX = 1602h
  6008. Return: ES:DI -> Windows/386 2.x API procedure entry point
  6009. Notes:    this interface is supported in Windows 3.x only for 2.x compatibility
  6010.     to get the current virtual machine (VM) ID in Windows/386 2.x:
  6011.         AX = 0000h
  6012.         ES:DI -> return address
  6013.         JUMP to address returned from INT 2F/AX=1602h
  6014.     After JUMP, at return address:
  6015.         BX = current VM ID.
  6016. SeeAlso: AX=C020h
  6017. --------W-2F1603-----------------------------
  6018. INT 2F - MS Windows/386 - GET INSTANCE DATA
  6019.     AX = 1603h
  6020. Return: AX = 5248h ('RH') if supported
  6021.         DS:SI -> Windows/386 instance data (see #1958)
  6022. Notes:    reportedly supported by RM Nimbus MS-DOS 3.3 kernel
  6023.     this function is called by DOSMGR when AX=1607h/BX=0015h is not
  6024.       supported, as is the case in DOS versions prior to 5.0
  6025.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  6026.       this function, DOSMGR's behavior, and instancing in general
  6027. SeeAlso: AX=1607h/BX=0015h
  6028.  
  6029. Format of Windows/386 instance data:
  6030. Offset    Size    Description    (Table 1958)
  6031.  00h    WORD    segment of IO.SYS (0000h = default 0070h)
  6032.  02h    WORD    offset in IO.SYS of STACKS data structure (DOS 3.2x)
  6033.         0000h if not applicable
  6034.  04h    WORD    number of instance data entries (max 32)
  6035.  06h    Array of instance data entries
  6036.     Offset    Size    Description
  6037.      00h    WORD    segment (0002h = DOS kernel)
  6038.      02h    WORD    offset
  6039.      04h    WORD    size
  6040. --------W-2F1605-----------------------------
  6041. INT 2F - MS Windows - WINDOWS ENHANCED MODE & 286 DOSX INIT BROADCAST
  6042.     AX = 1605h
  6043.     ES:BX = 0000h:0000h
  6044.     DS:SI = 0000h:0000h
  6045.     CX = 0000h
  6046.     DX = flags
  6047.         bit 0 = 0 if Windows enhanced-mode initialization
  6048.         bit 0 = 1 if Microsoft 286 DOS extender initialization
  6049.         bits 1-15 reserved (undefined)
  6050.     DI = version number (major in upper byte, minor in lower)
  6051. Return: CX = 0000h if okay for Windows to load
  6052.     CX = FFFFh (other registers unchanged) if Windows 3.0 in standard mode
  6053.     CX <> 0 if Windows should not load
  6054.     ES:BX -> startup info structure (see #1959)
  6055.     DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h
  6056.           (see #1962)
  6057. Notes:    the Windows enhanced mode loader and Microsoft 286 DOS extender will
  6058.       broadcast an INT 2F/AX=1605h call when initializing.    Any DOS device
  6059.       driver or TSR can watch for this broadcast and return the appropriate
  6060.       values.  If the driver or TSR returns CX <> 0, it is also its
  6061.       responsibility to display an error message.
  6062.     each handler must first chain to the prior INT 2F handler with
  6063.       registers unchanged before processing the call
  6064.     if the handler requires local data on a per-VM basis, it must store the
  6065.       returned ES:BX in the "next" field of a startup info structure and
  6066.       return a pointer to that structure in ES:BX
  6067.     a single TSR may set the V86 mode enable/disable callback; if DS:SI is
  6068.       already nonzero, the TSR must fail the initialization by setting CX
  6069.       nonzero
  6070.     MSD checks for Windows 3.0 running in standard mode by testing whether
  6071.       CX=FFFFh and other registers are unchanged on return
  6072.     Novell DOS v7.0 (Update 8 - Update 11) TASKMGR in multitasking mode
  6073.       uses this broadcast, even if TASKMGR.INI sets WinPresent= to OFF
  6074.     Microsoft's EMM386.EXE for DOS 5+ when installed with the NOEMS option
  6075.       changes its driver name from EMMQXXX0 to EMMXXXX0 while Windows is
  6076.       active
  6077. SeeAlso: AX=1606h,AX=1608h,AX=4B05h
  6078.  
  6079. Format of Windows Startup Information Structure:
  6080. Offset    Size    Description    (Table 1959)
  6081.  00h  2 BYTEs    major, minor version of info structure
  6082.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  6083.  06h    DWORD    pointer to ASCIZ name of virtual device file or 0000h:0000h
  6084.  0Ah    DWORD    virtual device reference data (see #1961)
  6085.         (only used if above nonzero)
  6086.  0Eh    DWORD    pointer to instance data records (see #1960) or 0000h:0000h
  6087.  
  6088. Format of one Instance Item in array:
  6089. Offset    Size    Description    (Table 1960)
  6090.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  6091.  04h    WORD    size of instance data
  6092.  
  6093. Format of Virtual Device Reference Data:
  6094. Offset    Size    Description    (Table 1961)
  6095.  00h    DWORD    physical address of ??? or 00000000h
  6096.  04h    DWORD    physical address of ??? table
  6097.  08h    DWORD    "DEST_PAGE" address to which pages must be mapped
  6098.  0Ch  N DWORDs    "SRC_PAGE" physical addresses of the pages
  6099.         00000000h = end of table
  6100. Note:    EMM386.EXE sets the first pointer to the start of the device driver
  6101.       chain, the second pointer to a field of 40h bytes followed by a
  6102.       16-bit offset to the end of the SRC_PAGE table, and DEST_PAGE to
  6103.       the start segment of the UMB area
  6104.  
  6105. (Table 1962)
  6106. Values Windows virtual mode enable/disable procedure is called with:
  6107.     AX = 0000h disable V86 mode
  6108.     AX = 0001h enable V86 mode
  6109.     interrupts disabled
  6110. Return: CF set on error
  6111.     CF clear if successful
  6112.     interrupts disabled
  6113. --------W-2F1606-----------------------------
  6114. INT 2F - MS Windows - WINDOWS ENHANCED MODE & 286 DOSX EXIT BROADCAST
  6115.     AX = 1606h
  6116.     DX = flags
  6117.         bit 0 = 0 if Windows enhanced-mode exit
  6118.         bit 0 = 1 if Microsoft 286 DOS extender exit
  6119.         bits 1-15 reserved (undefined)
  6120. Notes:    if the init broadcast fails (AX=1605h returned CX <> 0), then this
  6121.       broadcast will be issued immediately.
  6122.     this call will be issued in real mode
  6123.     Novell DOS v7.0 (Update 8 - Update 15) TASKMGR in multitasking mode
  6124.       uses this broadcast, even if TASKMGR.INI sets WinPresent= to OFF
  6125. SeeAlso: AX=1605h,AX=1609h
  6126. --------W-2F1607-----------------------------
  6127. INT 2F - MS Windows - VIRTUAL DEVICE CALL OUT API
  6128.     AX = 1607h
  6129.     BX = virtual device ID (see #1968)
  6130.     CX = (usually) callout subfunction
  6131. Return: (usually) AX,BX,CX,DX,ES contain results
  6132. Notes:    more of a convention than an API, this call specifies a standard
  6133.       mechanism for Windows enhanced-mode virtual devices (VxD's) to talk
  6134.       to DOS device drivers and TSRs
  6135.     see below for details on several virtual devices
  6136. SeeAlso: AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1607h/BX=0015h
  6137. SeeAlso: AX=1607h/BX=0018h,AX=1684h"DEVICE API",AX=C020h
  6138. --------W-2F1607BX0006-----------------------
  6139. INT 2F - MS Windows - "V86MMGR" VIRTUAL DEVICE API
  6140.     AX = 1607h
  6141.     BX = 0006h (VxD identifier of "V86MMGR")
  6142.     CX = 0000h
  6143. Return: AX = status
  6144.         0000h if local A20 state changed
  6145.         1607h if A20 unchanged
  6146.         other if global A20 state changed
  6147. --------W-2F1607BX000C-----------------------
  6148. INT 2F - MS Windows - "VMD" VIRTUAL MOUSE DEVICE API
  6149.     AX = 1607h
  6150.     BX = 000Ch (VxD identifier of "VMD")
  6151. Return: CX = nonzero if mouse driver already virtualized
  6152. Note:    VMD (Virtual Mouse Driver) calls this and then checks whether CX is
  6153.       nonzero; if yes, it will not automatically virtualize the mouse
  6154.       driver.  This would be used if MOUSE.COM already virtualizes
  6155.       itself using the Windows API.
  6156. SeeAlso: AX=1607h/BX=0014h,AX=1607h/BX=0015h
  6157. --------W-2F1607BX0010-----------------------
  6158. INT 2F C - MS Windows 3.1 - "BLOCKDEV" VIRTUAL HARD DISK DEVICE API
  6159.     AX = 1607h
  6160.     BX = 0010h (VxD identifier of "BLOCKDEV")
  6161.     CX = function
  6162.         0001h starting FastDisk compatibility tests
  6163.         0002h ending FastDisk compatibility tests
  6164.         0003h check if FastDisk installation allowed
  6165.         Return: CX = 0000h if allowed
  6166. Note:    this interface is called by the Windows FastDisk driver (such as
  6167.       WDCTRL) when it thinks that the INT 13h handler immediately below
  6168.       IO.SYS's INT 13h code is not in ROM; it should be supported by any
  6169.       program which hooks itself underneath IO.SYS's INT 13h code with
  6170.       INT 2F/AH=13h
  6171. SeeAlso: AX=1607h/BX=0014h,INT 2F/AH=13h
  6172. --------W-2F1607BX0014-----------------------
  6173. INT 2F - MS Windows - "VNETBIOS" VIRTUAL DEVICE API
  6174.     AX = 1607h
  6175.     BX = 0014h (VxD identifier of "VNETBIOS")
  6176. Return: ES:DI -> 128-byte table specifying VNETBIOS actions for each NetBIOS
  6177.         command code (see #1963)
  6178. Note:    VNETBIOS (Virtual NetBIOS) calls this function to determine whether
  6179.       the NetBIOS has an extensions Windows should know about
  6180. SeeAlso: AX=1607h/BX=000Ch,AX=1607h/BX=0010h,AX=1607h/BX=0015h
  6181.  
  6182. (Table 1963)
  6183. Values for VNETBIOS action code:
  6184.  00h    "VN_Unknown" unknown command
  6185.  04h    "VN_No_Map"  no memory mapping necessary
  6186.  08h    "VN_Map_In"  input buffer is quickly used, so no global mapping needed
  6187.  0Ch    "VN_Map_In"  output buffer is quickly used, so no global mapping needed
  6188.  10h    "VN_Map_In_Out"     buffer is quickly used, so no global mapping needed
  6189.  14h    "VN_Chain_Send"     the chain-send command
  6190.  18h    "VN_Cancel"    special case for cancel command
  6191.  1Ch    "VN_Buffer_In"    buffer is incoming
  6192.  20h    "VN_Buffer_Out" buffer is outgoing
  6193.  24h    "VN_Buffer_In_Out" buffer used for both incoming and outgoing data
  6194. --------D-2F1607BX0015-----------------------
  6195. INT 2F C - MS Windows - "DOSMGR" VIRTUAL DEVICE API
  6196.     AX = 1607h
  6197.     BX = 0015h (VxD identifier of "DOSMGR")
  6198.     CX = function
  6199.         0000h query instance processing
  6200.         DX = 0000h
  6201.         Return: CX = state
  6202.                 0000h not instanced
  6203.                 other instanced (DOS 5+ kernel returns 0001h)
  6204.                 DX = segment of DOS drivers or 0000h for
  6205.                     default of 0070h
  6206.                 ES:BX -> patch table (see #1965)
  6207.         0001h set patches in DOS
  6208.         DX = bit mask of patch requests (see #1964)
  6209.         Return: AX = B97Ch
  6210.             BX = bit mask of patches applied (see #1964)
  6211.             DX = A2ABh
  6212.         0002h remove patches in DOS (ignored by DOS 5.0 kernel)
  6213.         DX = bit mask of patch requests (see #1964)
  6214.         Return: CX = 0000h (DOS 5-6)
  6215.         Note:    return values are ignored by DOSMGR in Windows 3.1
  6216.         0003h get size of DOS data structures
  6217.         DX = bit mask of request (only one bit can be set)
  6218.             bit 0: Current Directory Structure size
  6219.         Return: if supported request:
  6220.                 AX = B97Ch
  6221.                 CX = size in bytes of requested structure
  6222.                 DX = A2ABh
  6223.             else:
  6224.                 CX = 0000h
  6225.                 all other registers preserved
  6226.         0004h determine instanced data structures
  6227.         Return: AX = B97Ch if supported
  6228.             DX = A2ABh if supported (DOS 5+ kernel returns 0000h)
  6229.             BX = bit mask of instanced items
  6230.                 bit 0: CDS
  6231.                 bit 1: SFT
  6232.                 bit 2: device list
  6233.                 bit 3: DOS swappable data area
  6234.         0005h get device driver size
  6235.         ES = segment of device driver
  6236.         Return: DX:AX = 0000h:0000h on error (not dev. driver segment)
  6237.             DX:AX = A2ABh:B97Ch if successful
  6238.                 BX:CX = size of device driver in bytes
  6239. Notes:    DOSMGR (DOS Manager) will check whether the OEM DOS/BIOS data has
  6240.       been instanced via this API and will not perform its own default
  6241.       instancing of the normal DOS/BIOS data if so; if this API is not
  6242.       supported, DOSMGR will also try to access instancing data through
  6243.       INT 2F/AX=1603h
  6244.     these functions are supported by the DOS 5+ kernel; DOSMGR contains
  6245.       tables of instancing information for earlier versions of DOS
  6246.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  6247.       DOSMGR's behavior and instancing in general
  6248. SeeAlso: AX=1603h,AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h
  6249. SeeAlso: AX=1684h"DEVICE API"
  6250.  
  6251. Bitfields for DOSMGR patch requests:
  6252. Bit(s)    Description    (Table 1964)
  6253.  0    enable critical sections
  6254.  1    NOP setting/checking user ID
  6255.  2    turn INT 21/AH=3Fh on STDIN into polling loop
  6256.  3    trap stack fault in "SYSINIT" to WIN386
  6257.  4    BIOS patch to trap "Insert disk X:" to WIN386
  6258.  
  6259. Format of DOSMGR patch table:
  6260. Offset    Size    Description    (Table 1965)
  6261.  00h  2 BYTEs    DOS version (major, minor)
  6262.  02h    WORD    offset in DOS data segment of "SAVEDS"
  6263.  04h    WORD    offset in DOS data segment of "SAVEBX"
  6264.  06h    WORD    offset in DOS data segment of InDOS flag
  6265.  08h    WORD    offset in DOS data segment of User ID word
  6266.  0Ah    WORD    offset in DOS data segment of "CritPatch" table to enable
  6267.           critical section calls (see INT 2A/AH=80h)
  6268.  0Ch    WORD    (DOS 5+ only) offset in DOS data segment of "UMB_HEAD",
  6269.           containing segment of last MCB in conventional memory
  6270. --------W-2F1607BX0018-----------------------
  6271. INT 2F C - MS Windows - "VMPoll" VIRTUAL DEVICE - IDLE CALLOUT
  6272.     AX = 1607h
  6273.     BX = 0018h (VMPoll VxD ID)
  6274.     CX = 0000h
  6275. Return: AX = status
  6276.         0000h if timeslice used
  6277.         nonzero if timeslice not needed
  6278. Note:    when VMPoll makes this callout, all virtual machines are idle
  6279. SeeAlso: AX=1607h
  6280. --------W-2F1607BX0021--------------------------------------
  6281. INT 2F C - MS Windows - "PageFile" VIRTUAL DEVICE - GET LOCK BYTE
  6282.     AX = 1607h
  6283.     BX = 0021h (PageFile VxD ID)
  6284.     CX = 0000h
  6285. Return: AX = status
  6286.         0000h success
  6287.         ES:DI -> cache lock byte in disk cacher
  6288.         other no disk cache or unsupported
  6289. Notes:    PageFile issues this call on real-mode initialization in order to allow
  6290.       disk caches to provide it with a byte which it can use to temporarily
  6291.       lock the disk cache; VMPOLL also issues this call, so it is made
  6292.       twice each time Windows starts up
  6293.     if this call fails, PageFile falls back to other techniques for locking
  6294.       the disk cache
  6295. SeeAlso: AX=1607h
  6296. --------E-2F1607BX22C0-----------------------
  6297. INT 2F - Rational Systems DOS/4GW - ???
  6298.     AX = 1607h
  6299.     BX = 22C0h
  6300.     ???
  6301. Return: ???
  6302. SeeAlso: INT 15/AX=BF02h,INT 15/AX=BF04h
  6303. --------W-2F1608-----------------------------
  6304. INT 2F C - MS Windows - WINDOWS ENHANCED MODE INIT COMPLETE BROADCAST
  6305.     AX = 1608h
  6306. Notes:    called after all installable devices have been initialized
  6307.     real-mode software may be called between the Windows enhanced-mode init
  6308.       call (AX=1605h) and this call; the software must detect this
  6309.       situation
  6310. SeeAlso: AX=1605h,AX=1609h
  6311. --------W-2F1609-----------------------------
  6312. INT 2F C - MS Windows - WINDOWS ENHANCED MODE BEGIN EXIT BROADCAST
  6313.     AX = 1609h
  6314. Note:    called at the beginning of a normal exit sequence; not made in the
  6315.       event of a fatal system crash
  6316. SeeAlso: AX=1606h,AX=1608h
  6317. --------W-2F160A-----------------------------
  6318. INT 2F - MS Windows 3.1 - IDENTIFY WINDOWS VERSION AND TYPE
  6319.     AX = 160Ah
  6320. Return: AX = 0000h if call supported
  6321.         BX = version (BH=major, BL=minor)
  6322.         CX = mode (0002h = standard, 0003h = enhanced)
  6323. SeeAlso: AX=1600h,AX=4680h
  6324. --------W-2F160B-----------------------------
  6325. INT 2F - MS Windows 3.1 - IDENTIFY TSRs
  6326.     AX = 160Bh
  6327.     ES:DI -> communication structure (see #1966) or 0000h:0000h
  6328. Return: ES:DI -> communication structure
  6329. Desc:    this call allows Windows-aware TSRs to make themselves known to
  6330.       Windows.
  6331. Note:    the TSR should allocate a communication structure, place the given
  6332.       ES:DI pointer in the first field, and return a pointer to the new
  6333.       structure
  6334. SeeAlso: AX=1605h,AX=160Ch,AX=4B01h,AX=4B05h
  6335.  
  6336. Format of TSR-to-Windows communication structure:
  6337. Offset    Size    Description    (Table 1966)
  6338.  00h    DWORD    pointer to next structure
  6339.  04h    WORD    PSP segment
  6340.  06h    WORD    API version ID (0100h)
  6341.  08h    WORD    EXEC flags
  6342.         bit 0: "WINEXEC"
  6343.         bit 1: "LOADLIBRARY"
  6344.         bit 2: "OPENDRIVER"
  6345.  0Ah    WORD    "exec_cmd_show"
  6346.  0Ch    DWORD    "exec_cmd"
  6347.  10h  4 BYTEs    reserved (0)
  6348.  14h    DWORD    pointer to TSR ID block (see #1967)
  6349.  18h    DWORD    pointer to TSR data block or 0000h:0000h
  6350.  
  6351. Format of Norton Utilities 6.0 TSR ID block:
  6352. Offset    Size    Description    (Table 1967)
  6353.  00h    WORD    length of name string
  6354.  02h  N BYTEs    name of TSR's executable
  6355. --------W-2F160C-----------------------------
  6356. INT 2F - MS Windows 3.1 - DETECT ROMs
  6357.     AX = 160Ch
  6358.     ???
  6359. Return: ???
  6360. Note:    used by ROM Windows
  6361. SeeAlso: AX=160Bh
  6362. --------m-2F1610-----------------------------
  6363. INT 2F - XMS v1.x only - GET DRIVER ADDRESS
  6364.     AX = 1610h
  6365.     details unavailable
  6366. Note:    this function and AX=1600h were only used in XMS version 1 and are now
  6367.       obsolete.  Use AX=4300h and AX=4310h instead
  6368. SeeAlso: AX=1600h,AX=4310h
  6369. --------W-2F1680-----------------------------
  6370. INT 2F - MS Windows, DPMI, various - RELEASE CURRENT VIRTUAL MACHINE TIME-SLICE
  6371.     AX = 1680h
  6372. Return: AL = status
  6373.         00h if the call is supported
  6374.         80h (unchanged) if the call is not supported
  6375. Notes:    programs can use this function in idle loops to enhance performance
  6376.       under multitaskers; this call is supported by MS Windows 3.0, DOS 5+,
  6377.       DPMI 1.0+, and in OS/2 2.0+ for multitasking DOS applications
  6378.     does not block the program; it just gives up the remainder of the time
  6379.       slice
  6380.     should not be used by Windows-specific programs
  6381.     when called very often without intermediate screen output under WIN 3+,
  6382.       the VM will go into an idle-state and will not receive the next slice
  6383.       before 8 seconds. This time can be changed in SYSTEM.INI through
  6384.       "IdleVMWakeUpTime=<seconds>". Setting to zero results in a long wait.
  6385. SeeAlso: INT 15/AX=1000h,INT 15/AX=5305h,INT 21/AH=89h,INT 7A/BX=000Ah
  6386. --------W-2F1681-----------------------------
  6387. INT 2F - MS Windows 3+ - BEGIN CRITICAL SECTION
  6388.     AX = 1681h
  6389. Notes:    used to prevent a task switch from occurring
  6390.     should be followed by an INT 2F/AX=1682h call as soon as possible
  6391.     nested calls are allowed, and must be followed by an appropriate number
  6392.       of "end critical section" calls
  6393.     not supported in Windows/386 2.x. Get INDOS flag with INT 21/AH=34h and
  6394.       increment by hand.
  6395. SeeAlso: AX=1682h,INT 15/AX=101Bh,INT 21/AH=34h
  6396. --------W-2F1682-----------------------------
  6397. INT 2F - MS Windows 3+ - END CRITICAL SECTION
  6398.     AX = 1682h
  6399. Notes:    not supported in Windows/386 2.x.  Get InDOS flag with INT 21/AH=34h
  6400.       and decrement by hand, taking care not to decrement InDOS flag
  6401.       through zero
  6402. SeeAlso: AX=1681h,INT 15/AX=101Ch,INT 21/AH=34h
  6403. --------W-2F1683-----------------------------
  6404. INT 2F - MS Windows 3+ - GET CURRENT VIRTUAL MACHINE ID
  6405.     AX = 1683h
  6406. Return: BX = current virtual machine (VM) ID
  6407. Notes:    Windows itself currently runs in VM 1, but this can't be relied upon
  6408.     VM IDs are reused when VMs are destroyed
  6409.     an ID of 0 will never be returned
  6410. SeeAlso: AX=1684h"DEVICE API",AX=1685h,AX=168Bh
  6411. --------W-2F1684-----------------------------
  6412. INT 2F - MS Windows - GET DEVICE API ENTRY POINT
  6413.     AX = 1684h
  6414.     BX = virtual device (VxD) ID (see #1968)
  6415.     ES:DI = 0000h:0000h
  6416. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  6417. Note:    some Windows enhanced-mode virtual devices provide services that
  6418.       applications can access.  For example, the Virtual Display Device
  6419.       (VDD) provides an API used in turn by WINOLDAP.
  6420. SeeAlso: AX=1683h,AX=4011h
  6421.  
  6422. (Table 1968)
  6423. Values for MS Windows VxD ID:
  6424. Value    Name   CallOut V86 PM    Description
  6425.  0000h    LPT        N    N  N    DOS386 LPT Device (Windows for Workgroups 3.11)
  6426.  0000h    MSODISUP    N    N  N    MS ODI Support (Windows for Workgroups 3.11)
  6427.  0000h    NWNBLINK    N    N  N    Netware NetBIOS (Windows for Workgroups 3.11)
  6428.  0000h    SERIAL        N    N  N    DOS386 Serial Device (Windows for Workgrp 3.11)
  6429.  0001h    VMM        N  N    Virtual Machine Manager
  6430.  0002h    Debug
  6431.  0003h    VPICD        Y  Y    Virtual Prog. Interrupt Controller (PIC) Device
  6432.  0004h    VDMAD        N  N    Virtual Direct Memory Access (DMA) Device
  6433.  0005h    VTD        Y  Y    Virtual Timer Device
  6434.  0006h    V86MMGR        Y    N  N    Virtual 8086 Mode Device
  6435.  0007h    PageSwap    N  N    Paging Device
  6436.  0008h    Parity        N  N    Parity-check trapper
  6437.  0009h    Reboot        N  Y    Ctrl-Alt-Del handler
  6438.  000Ah    VDD        N  Y    Virtual Display Device (GRABBER)
  6439.  000Bh    VSD        N  N    Virtual Sound Device
  6440.  000Ch    VMD        Y    Y  Y    Virtual Mouse Device
  6441.  000Dh    VKD        N  Y    Virtual Keyboard Device
  6442.  000Eh    VCD        N  Y    Virtual COMM Device
  6443.  000Fh    VPD            Virtual Printer Device
  6444.  0010h    VHD            Virtual Hard Disk Device (Windows 3.0)
  6445.  0010h    BLOCKDEV    N  N    Virtual Hard Disk Device (Windows 3.1)
  6446.  0010h    IOS        N    N  N    DOS386 IOS Device (Windows for Workgroups 3.11)
  6447.  0010h    IOS        N  Y    (Chicago)
  6448.  0011h    VMCPD        Y  Y    Virtual Math CoProcessor Device
  6449.  0012h    EBIOS        N  N    Reserve EBIOS page (e.g., on PS/2)
  6450.  0013h    BIOSXLAT    N  N    Map ROM BIOS API between prot & V86 mode
  6451.  0014h    VNETBIOS    Y    N  N    Virtual NetBIOS Device
  6452.  0015h    DOSMGR        Y    Y  N    DOS data instancing (see #1971)
  6453.  0016h    WINLOAD
  6454.  0017h    SHELL        N  Y
  6455.  0018h    VMPOLL        N  N
  6456.  0019h    VPROD
  6457.  001Ah    DOSNET        N  N    assures network integrity across VMs
  6458.  001Ah    VNETWARE    Y  Y    Novell NetWare DOSNET replacement
  6459.  001Bh    VFD        N  N    Virtual Floppy Device
  6460.  001Ch    VDD2            Secondary display adapter
  6461.  001Ch    LoadHi        N  N    Netroom LoadHi Device (RMLODHI.VXD)
  6462.  001Ch    LoadHi        N  N    386MAX LoadHi Device (386MAX.VXD)
  6463.  001Ch    LoadHi        N  N    Win386 LoadHi Device (EMM386.EXE)
  6464.  001Dh    WINDEBUG    N  Y
  6465.  001Dh    TDDebug        N  Y
  6466.  001Eh    TSRLoad            TSR instance utility
  6467.  001Fh    BiosHook        BIOS interrupt hooker VxD
  6468.  0020h    Int13        N    N  N
  6469.  0021h    PageFile    N  Y    Paging File device
  6470.  0022h    SCSI
  6471.  0023h    MCA_POS            Microchannel Programmable Option Select
  6472.  0024h    SCSIFD            SCSI FastDisk device
  6473.  0025h    VPEND            Pen device
  6474.  0026h    APM            Advanced Power Management
  6475.  0027h    VXDLDR         N    Y  Y    VXDLDR (Windows for Workgroups 3.11)
  6476.  0028h    NDIS         N    Y  Y    Network Driver Interface Specification
  6477.                   (Windows for Workgroups 3.11)
  6478.  002Ah    VWIN32        N  Y    (Chicago)
  6479.  002Bh    VCOMM         N    Y  Y    DOS386 VCOMM Device (Windows for Workgrps 3.11)
  6480.  002Dh    W32S         Y    N  Y    WIN32s 32-bit extension to Windows API
  6481.  0030h    MACH32         N    N  Y    ATI Mach32 video card
  6482.  0031h    NETBEUI         N    N  N    NETBEUI (Windows for Workgroups 3.11)
  6483.  0032h    SERVER         N    Y  Y    Int21 File Server (Windows for Workgroups 3.11)
  6484.  0033h    CONFIGMG    Y  Y    (Chicago)
  6485.  0033h    EDOS        N  N    Windows DOS Box Enhancer by Mom's Software
  6486.  0034h    DWCFGMG.SYS        Plug-and-Play configuration manager
  6487.  0036h    VFBACKUP    Y  Y    (Chicago)
  6488.  0038h    VCOND        Y  Y    (Chicago)
  6489.  003Ah    VPMTD         N    N  Y    IFAX Scheduler Device (Windows for Workgr 3.11)
  6490.  003Bh    DSVXD        Y  N    DoubleSpace VxD from MS-DOS v6.x
  6491.  0051h    ISAPNP        N  N
  6492.  008Dh    ESDI_506    N  N    (Chicago)
  6493.  0090h    voltrack    N  N
  6494.  00FDh    FAKEIDE        N  N    (Chicago)
  6495.  0102h    CV1        N  N    Microsoft C/C++ 7.00+ CodeView for Windows
  6496.  0200h    VIPX        Y  Y    NetWare Virtual IPX Driver
  6497.  0200h    VTEMPD            dummy template driver by Ray Patch
  6498.  0201h    VNWLSERV    N  N    NetWare Lite 1.1 Server (SERVER.EXE)
  6499.  0202h    WINICE        Y  Y    SoftICE/W
  6500.  0203h    VCLIENT        N  Y    NetWare Lite 1.1+ Client
  6501.  0205h    VCAFT        N  N    Novell Virtual CAFT Driver (LANalyzer for Win)
  6502.  0205h    BCW        Y  Y    Nu-Mega Bounds Checker for Windows
  6503.  0206h    VTXRX        N  N    Novell Virtual TXRX Driver (LANalyzer for Win)
  6504.  0207h    DPMS         N    Y  N    Novell DOS Protected Mode Services
  6505.  0234h    VCOMMUTE    Y  Y    PC Tools Commute
  6506.  0442h    VTDAPI        N  Y    MMSys Win386 VTAPI Device
  6507.  0444h    VADMAD            Autoinitialize DMA (Windows 3.0)
  6508.  0445h    VSBD        Y  Y    WinResKit: Sound Blaster Device
  6509.  0446h    VADLIBD         Y    Y  Y    MMSys Win386 AdLib Device (v3.x)
  6510.  045Dh    VflatD        N  Y    dva.386, part of WIN32s
  6511.  0460h    UNIMODEM    N  Y
  6512.  0480h    VNetSup         N    Y  Y    Virtual Net Support (Windows for Workgrps 3.11)
  6513.  0481h    VRedir         N    N  N    Redirector File System Driver
  6514.                   (Windows for Workgroups 3.11)
  6515.  0482h    VBrowse        Y  Y    Win386 Virtual Browser
  6516.  0483h    VSHARE        N  N    Windows for Workgroups Virtual SHARE
  6517.  0484h    IFSMgr         Y    Y  N    Installable File System Manager
  6518.                   (Windows for Workgroups 3.11)
  6519.  0486h    VFAT         N    Y  Y    Win386 HPFS Driver (Windows for Workgrps 3.11)
  6520.  0487h    NWLINK        Y  Y    Win386 Virtual Packet Exchange Protocol
  6521.  0487h    NWSUP         Y    N  N    NetWare Vnetbios shim
  6522.  0489h    VIP        Y
  6523.  048Ah    VTCP        Y
  6524.  048Bh    VCache         N    Y  Y    Virtual File Cache (Windows for Workgrps 3.11)
  6525.  048Bh    VCACHE        Y  Y
  6526.  048Dh    RASMAC        Y  Y    enhanced mode Win4Workgroups RASMAC device
  6527.  1020h    VCV            Microsoft C/C++ 7.00 CodeView
  6528.  1021h    VMB        Y  Y    Microsoft C/C++ 7.00 WXSRVR
  6529.  1022h    Vpfd        Y  Y    Microsoft C/C++ 7.00
  6530.  1025h    MMD        Y  Y    Microsoft C/C++ 8.00, Visual C/C++ 1.00
  6531.  2020h    PIPE        Y  Y    by Thomas W. Olson, in Windows/DOS DevJrn 5/92
  6532.  21EAh    VADLIBWD    N  Y    Adlib Waveform Driver by John Ridges
  6533.  2200h    VFINTD        Y  Y    Norton VFINTD (Norton Desktop)
  6534.  22C0h    ???        Y        Rational Systems DOS/4GW ???
  6535.  2402h    ZMAX        N  N    Qualitas 386MAX v7 DOSMAX handler
  6536.  24A0h    VNSS        N  Y    Norton Screen Saver (Norton Desktop)
  6537.  24A1h    VNDWD        Y  Y    Norton VNDWD Device (Norton Desktop)
  6538.  24A2h    SYMEvent    Y  Y    Norton Utilities v8
  6539.  2540h    VILD        Y  N    INTERLNK client from MS-DOS v6.x
  6540.  2640h    VASBID        N  Y    WinResKit: Artisoft Sounding Board Device
  6541.  2860h    COMMTASK    N    N  Y    Windows 386-mode preemptive tasker by James
  6542.                   A. Kenemuth of Interabang Computing
  6543.  28A0h    PHARLAPX    Y    PharLap inter-VM communications DLL
  6544.  28A1h    PharLap        Y    Y  Y    PharLap 386|DOS-Extender DOSXNT.386
  6545.  28C0h    VXD        N    Y  Y    Generic VxD for real and protected mode by
  6546.                   Andrew Schulman in MSJ February 1993
  6547.  28C1h    PUSHKEYS        VKD_Force_Keys device
  6548.  28C2h    VCR3D            Virtual CR3, by A.Schulman in MSJ October 1992
  6549.  2925h    EDOS        Y  Y    Enhanced DOS by Firefly Software
  6550.  292Dh    VSBPD        Y  Y    Sound Blaster Pro
  6551.  304Ch    DWCFGMG.SYS        Plug-and-Play configuration access
  6552.  3098h    VstlthD        N    N  N    for QEMM Stealth ROM mode
  6553.  310Eh    WPS        N  Y    MS DevNet CD-ROM: Windows Process Status
  6554.  313Bh    PMC            Power Management Coordinator
  6555.  31CFh    STAT.386        Ton Plooy's processor statistics VxD
  6556.  32CBh    VFRAD        Y  Y    Dr.Franz - Simultan's diagnotics VFRAD.386
  6557.  36AEh    AIB-PC.386    Y  Y    Sunset Laboratory interface hardware driver
  6558.  377Bh    MX1501HAD        Cherry keyboard chipcard reader
  6559.  4321h    POSTMSG        Y  Y    (see #1996)
  6560.  7A5Fh    SIWVID        Y    Y  Y    Soft-ICE for Windows video driver
  6561.  7FE0h    VSWITCHD    Y  N    by Jeff Prosise
  6562.  7FE0h    VWFD        N    Y  Y    reports windowed/fullscreen state; by Neil
  6563.                   Sandlin of Microsoft, shipped with ANSIPLUS
  6564.  7FE1h    VWATCHD        N    Y  Y    basic driver w/ no functionality except tracing
  6565.                   by Keith Jin of Microsoft PSS
  6566.  7FE5h    VFINTD        N    Y  Y    Virtual Floppy Interrupt trapper by Neil
  6567.                   Sandlin of Microsoft
  6568.  7FE7h    VMPAGES        N    Y  Y    demonstration of exporting VxD services, by
  6569.                   Neil Sandlin of Microsoft
  6570.  7FE8h    VPOSTD        Y  Y    PostMessage() demo by Curtis J. Palmer of MS
  6571.  7FE9h    VIdleD        N    N  N    demonstration of Call_When_Idle function, by
  6572.                   Bernie McIlroy of Microsoft
  6573.  7FEBh    VMIOD        N    N  N    Virtual Monitor I/O Traffic Device, by Neil
  6574.                   Sandlin of Microsoft
  6575.  7FEDh    VMIRQD        N    N  N    Virtual Monitor IRQ Traffic Device, by Neil
  6576.                   Sandlin of Microsoft
  6577.  8888h    VbillD            Bill Potvin II's for reversing Compaq LTE video
  6578.  EEEEh    VEPSD        N  N    Virtual Extended Paging Services for
  6579.                   Borland C++ v4.0
  6580. Note:    The high bit of the VxD ID is reserved for future use. Originally,
  6581.     the next 10 bits were the OEM number which was assigned by Microsoft,
  6582.     and the low 5 bits were the device number.  Currently, Microsoft
  6583.     assigns VxD IDs individually for each driver; send blank email to
  6584.     vxdid@microsoft.com for more information.
  6585. --------W-2F1684BX0003-----------------------
  6586. INT 2F - MS Windows - VPICD - GET API ENTRY POINT
  6587.     AX = 1684h
  6588.     BX = 0003h (virtual device ID for VPICD device) (see #1968)
  6589.     ES:DI = 0000h:0000h
  6590. Return: ES:DI -> VxD API entry point
  6591.           0000h:0000h if the VxD does not support an API
  6592. --------W-2F1684BX0005-----------------------
  6593. INT 2F - MS Windows - VTD - GET API ENTRY POINT
  6594.     AX = 1684h
  6595.     BX = 0005h (virtual device ID for VTD device) (see #1968)
  6596.     ES:DI = 0000h:0000h
  6597. Return: ES:DI -> VxD API entry point (see #1969)
  6598.           0000h:0000h if the VxD does not support an API
  6599.  
  6600. (Table 1969)
  6601. Call VTD.386 entry point with:
  6602.     AX = function number
  6603.         0000h get VTD version number
  6604.         Return: AH = major version
  6605.             AL = minor version
  6606.         0100h get current clock tick time
  6607.         Return: EDX:EAX = clock tick time in 840ns units since Windows
  6608.                   was started
  6609.         0101h get current system time in milliseconds
  6610.         Return: EAX = time in milliseconds that Windows has been
  6611.                   running
  6612.         0102h get current virtual machine time
  6613.         Return: EAX = cumulative amount of time the virtual machine has
  6614.                   been active, in milliseconds
  6615. Note:    this entry point should only be called directly when TOOLHELP.DLL
  6616.       TimerCount() cannot be called
  6617. SeeAlso: #0674,#0676,#0675 at INT 20"Windows"
  6618. --------W-2F1684BX0009-----------------------
  6619. INT 2F - MS Windows - REBOOT - GET API ENTRY POINT
  6620.     AX = 1684h
  6621.     BX = 0009h (virtual device ID for REBOOT device) (see #1968)
  6622.     ES:DI = 0000h:0000h
  6623. Return: ES:DI -> VxD API entry point (see #1970)
  6624.           0000h:0000h if the VxD does not support an API
  6625. SeeAlso: INT 14/AH=17h"FOSSIL",INT 16/AX=E0FFh
  6626.  
  6627. (Table 1970)
  6628. Call REBOOT protected-mode entry point with:
  6629.     AX = function
  6630.         0100h warm boot
  6631.         Return: never
  6632.         Note:    broadcasts "Reboot_Processor" message, which is caught
  6633.               by the VKD device
  6634.         0201h set KERNEL Ctrl-Alt-Del handler
  6635.         ES:DI -> new Ctrl-Alt-Del handler
  6636.         DS:SI -> KERNEL reboot sanity check byte
  6637.         Return: CF clear
  6638.         Notes:    if an application installs its own handler and then
  6639.               chains to Windows' handler, Windows will no longer
  6640.               be able to detect hung applications, and will always
  6641.               produce an "Application not responding" dialog
  6642.             DS must contain a writable, fixed selector because
  6643.               the provided address is converted to a linear address
  6644.               before being stored
  6645.             when Ctrl-Alt-Del is pressed in the system VM, Reboot
  6646.               sets the sanity check byte to zero, schedules a
  6647.               750ms wait, and then tests whether the check byte is
  6648.               still zero; if not, it displays a message that there
  6649.               is no hung application and then exits
  6650.         0202h get KERNEL Ctrl-Alt-Del handler
  6651.         Return: CF clear
  6652.             ES:DI -> current Ctrl-Alt-Del handler
  6653.         Note:    the default handler is located in KERNEL
  6654.         0203h display "Application not responding" dialog box
  6655.         ES:DI -> ASCIZ name of hung application
  6656.         Return: never if user pressed Ctrl-Alt-Del a second time
  6657.             CF clear
  6658.             AX = result
  6659.                 0000h user pressed Esc
  6660.                 0001h user pressed Enter
  6661.         Note:    this function is used by the default Windows
  6662.               Ctrl-Alt-Del handler
  6663.         0204h set/reset protected-mode INT 01 handler
  6664.         CX:EDX -> new protected-mode INT 01 handler
  6665.         CX = 0000h restore protected-mode INT 01 handler
  6666.         Return: CF clear
  6667.         Notes:    if CX is nonzero, the current handler address is saved
  6668.               internally before the new handler is set; this saved
  6669.               address is then used when CX is zero on entry
  6670.             used by Windows' default Ctrl-Alt-Del handler; actual
  6671.               fatal exit to DOS will be done on next INT 01
  6672.         Warning: opened files are not closed and remain open as
  6673.               orphaned files in DOS
  6674. Note:    functions 0201h and 0203h are not useful outside the system VM
  6675. SeeAlso: #0677,#0678
  6676. --------W-2F1684BX000C-----------------------
  6677. INT 2F - MS Windows - VMD - GET API ENTRY POINT
  6678.     AX = 1684h
  6679.     BX = 000Ch (virtual device ID for VMD device) (see #1968)
  6680.     ES:DI = 0000h:0000h
  6681. Return: ES:DI -> VxD API entry point
  6682.           0000h:0000h if the VxD does not support an API
  6683. --------W-2F1684BX0015-----------------------
  6684. INT 2F - MS Windows - DOSMGR - GET API ENTRY POINT
  6685.     AX = 1684h
  6686.     BX = 0015h (virtual device ID for DOSMGR device) (see #1968)
  6687.     ES:DI = 0000h:0000h
  6688. Return: ES:DI -> VxD API entry point (see #1971,#0686)
  6689.           0000h:0000h if the VxD does not support an API
  6690.  
  6691. (Table 1971)
  6692. Call DOSMGR entry point with:
  6693.     AX = 0000h get DOSMGR version
  6694.         Return: CF clear
  6695.             AX = version (AH = major, AL = minor)
  6696.     AX = 0001h set critical focus
  6697.         Return: CF clear
  6698.     AX = 0002h crash current virtual machine
  6699.         Return: never
  6700.         Note:   displays message box stating that "application has been
  6701.               stopped by the DOSMGR device"
  6702.     AX = 0003h enter critical section
  6703.         Note:   this function assumes that the code for INT 2A/AX=8001h
  6704.               and INT 2A/AX=8002h have been modified for Windows
  6705.     AX = 0004h get VM ID byte
  6706.         Return: CF clear if successful
  6707.             ES:DI -> VM ID byte
  6708.             CF set on error
  6709.         Note:   this function fails if the INT 2A modifications have not
  6710.               yet been applied
  6711.     AX = 0005h inform Windows of possible media change
  6712.         BL = drive number (00h=A:)
  6713.         Return: CF clear if successful
  6714.             CF set on error
  6715. SeeAlso: #0686 at INT 20"Windows"
  6716. --------W-2F1684BX0017-----------------------
  6717. INT 2F U - MS Windows - SHELL - GET API ENTRY POINT
  6718.     AX = 1684h
  6719.     BX = 0017h (virtual device ID for SHELL device) (see #1968)
  6720.     ES:DI = 0000h:0000h
  6721. Return: ES:DI -> VxD API entry point (see #1972)
  6722.           0000h:0000h if the VxD does not support an API
  6723. SeeAlso: AX=1684h/BX=0021h
  6724.  
  6725. (Table 1972)
  6726. Call SHELL entry point with:
  6727.     EDX = function number (0000h-0016h, mostly unknown)
  6728.         0000h get version number
  6729.         Return: AX = version number
  6730.             EBX = system VM handle
  6731.         0001h "SHELL_Get_SYSVM_Info" get system VM information
  6732.         Return: CF clear
  6733.             AX bit 0 set if system VM executing exclusively
  6734.             BX = background time slice priority
  6735.             CX = foreground time slice priority
  6736.             SI = minimum time slice in milliseconds
  6737.         0002h "SHELL_Set_SYSVM_Info" set system VM information
  6738.         AX bit 0 set if system VM should execute exclusively (ignored?)
  6739.         BX = background time slice priority (1-10000)
  6740.         CX = foreground time slice priority (1-10000)
  6741.         SI = minimum time slice in milliseconds (1-10000)
  6742.         Return: CF clear if successful
  6743.         0003h "SHELL_Crt_VM" create a virtual machine
  6744.         ES:EDI -> SEB structure (see #1973)
  6745.         Return: CF clear if successful
  6746.                EAX = VM handle
  6747.             CF set on error
  6748.                EDX,EAX = result from GetSetDetailedVMError()
  6749.         0004h "SHELL_Destroy_VM" destroy a virtual machine
  6750.         EBX = VM handle (not system VM)
  6751.         Return: nothing
  6752.         0005h "SHELL_Set_Focus"
  6753.         EBX = VM handle
  6754.         ECX = ???
  6755.         Return: nothing
  6756.         0006h "SHELL_Get_VM_State"
  6757.         EBX = VM handle (not system VM)
  6758.         ES:EDI -> ??? structure
  6759.         Return: CF clear if successful
  6760.         0007h "SHELL_Set_VM_State"
  6761.         EBX = VM handle (not system VM)
  6762.         ES:EDI -> ??? structure
  6763.         0008h "SHELL_Debug_Out"
  6764.         ???
  6765.         Return: ???
  6766.         Note:    dummy function in retail version of MS Windows
  6767.         0009h "SHELL_VMDA_Init"
  6768.         ???
  6769.         Return: ???
  6770.         000Ah "SHELL_VMDA_Exit"
  6771.         ???
  6772.         Return: ???
  6773.         000Bh "SHELL_Get_Message_Txt"
  6774.         ???
  6775.         Return: ???
  6776.         000Ch "SHELL_Event_Complete"
  6777.         ???
  6778.         Return: ???
  6779.         000Dh "SHELL_Get_Contention_Info"
  6780.         ???
  6781.         Return: ???
  6782.         000Eh "SHELL_Get_Clip_Info"
  6783.         ???
  6784.         Return: ???
  6785.         000Fh "SHELL_Set_Paste"
  6786.         ???
  6787.         Return: ???
  6788.         0010h "SHELL_Switcher_Assist"
  6789.         ???
  6790.         Return: ???
  6791.         0011h "SHELL_Get_FileSysChng"
  6792.         ???
  6793.         Return: ???
  6794.         0012h "SHELL_Query_Destroy"
  6795.         ???
  6796.         Return: ???
  6797.         0013h "SHELL_SetFocus_Cur_VM" set input focus to current VM
  6798.         ???
  6799.         Return: ???
  6800.         0014h "SHELL_User_Busy_API"
  6801.         ???
  6802.         Return: ???
  6803.         0015h "SHELL_Chng_Hot_Key"
  6804.         ???
  6805.         Return: ???
  6806.         0016h "SHELL_Get_TermInfo"
  6807.         ???
  6808.         Return: ???
  6809. Return: CF set if called from VM other than system VM
  6810.         EAX = FFFFFFFFh
  6811. Note:    except for function 0013h, this API may only be called from the system
  6812.       VM
  6813. SeeAlso: #0687 at INT 20"Windows"
  6814.  
  6815. Format of Shell Execution Block (SEB):
  6816. Offset    Size    Description    (Table 1973)
  6817.  00h    DWORD    PIF flags (see #1974)
  6818.  04h    DWORD    display flags (see #1975)
  6819.  08h    PWORD    -> pathname of .EXE to run
  6820.  0Eh    PWORD    -> argument list
  6821.  14h    PWORD    -> working drive/directory
  6822.  1Ah    WORD    desired number of V86 pages for virtual machine
  6823.  1Ch    WORD    minimum number of V86 pages for VM
  6824.  1Eh    WORD    foreground priority
  6825.  20h    WORD    background priority
  6826.  22h    WORD    maximum KB of EMS
  6827.  24h    WORD    minimum KB of EMS
  6828.  26h    WORD    maximum KB of XMS
  6829.  28h    WORD    minimum KB of XMS
  6830.  2Ah    WORD    ???
  6831.  2Ch    WORD    ???
  6832.  2Eh 128 BYTEs    title
  6833. Note:    the PWORDs at offsets 08h,0Eh, and 14h consist of a DWORD offset
  6834.       followed by a WORD selector
  6835.  
  6836. Bitfields for 386 Enhanced Mode PIF flags:
  6837. Bit(s)    Description    (Table 1974)
  6838.  0    exclusive use of processor when VM is fullscreen
  6839.  1    VM runs in background
  6840.  2    VM runs in window
  6841.  3-4    ???
  6842.  5    Alt-Tab reserved
  6843.  6    Alt-Esc reserved
  6844.  7    Alt-Space reserved
  6845.  8    Alt-Enter reserved
  6846.  9    Alt-PrtSc reserved
  6847.  10    PrtSc reserved
  6848.  11    Ctrl-Esc reserved
  6849.  12    VM will release idle time slice
  6850.  13    VM not allowed to use high mem
  6851.  14    unknown
  6852.  15    VM expanded mem not pageable
  6853.  16    VM extended mem not pageable
  6854.  17    Fast paste from clipboard enabled
  6855.  18    VM app memory not pageable
  6856.  30    Close VM when app exits
  6857.  
  6858. Bitfields for SHELL display options:
  6859. Bit(s)    Description    (Table 1975)
  6860.  0    emulate text mode
  6861.  1    monitor text port
  6862.  2    monitor low graphics port
  6863.  3    monitor high graphics port
  6864.  7    Retain video memory
  6865. --------W-2F1684BX0021-----------------------
  6866. INT 2F U - MS Windows - PAGEFILE - GET API ENTRY POINT
  6867.     AX = 1684h
  6868.     BX = 0021h (virtual device ID for PAGEFILE device) (see #1968)
  6869.     ES:DI = 0000h:0000h
  6870. Return: ES:DI -> VxD API entry point (see #1976)
  6871.           0000h:0000h if the VxD does not support an API
  6872. SeeAlso: AX=1684h/BX=0017h
  6873.  
  6874. (Table 1976)
  6875. Call PAGEFILE entry point with:
  6876.     AX = function
  6877.         0000h get version
  6878.         Return: CF clear
  6879.             AX = version (AH = major, AL = minor)
  6880.         0001h get swap file info
  6881.         DS:SI -> 128-byte buffer for swap file full pathname
  6882.         DS:DI -> 128-byte buffer for SPART.PAR full pathname
  6883.         Return: CF clear
  6884.             AL = pager type (see #1977)
  6885.             AH = flags
  6886.                 bit 7: swap file corrupted
  6887.             ECX = maximum size of swap file
  6888.             DS:SI buffer filled if paging enabled
  6889.             DS:DI buffer filled if permanent swap file
  6890.         0002h delete permanent swap file on exit
  6891.         Return: CF clear
  6892.         0003h get current temporary swap file size
  6893.         Return: CF clear
  6894.             DX:AX = current swap file size in bytes
  6895.                 0000h:0000h if permanent swap file
  6896. Note:    this API is only available in protected mode, and may only be called
  6897.       from the system VM
  6898. SeeAlso: #0691 at INT 20"Windows"
  6899.  
  6900. (Table 1977)
  6901. Values for MS Windows PAGEFILE pager type:
  6902.  00h    paging disabled
  6903.  01h    MSDOS
  6904.  02h    BIOS
  6905.  03h    32-bit disk access
  6906. SeeAlso: #1976
  6907. --------x-2F1684BX0034-----------------------
  6908. INT 2F - Intel Plug-and-Play - CONFIGURATION MANAGER - GET ENTRY POINT
  6909.     AX = 1684h
  6910.     BX = 0034h (ID for Configuration Manager) (see #1968)
  6911.     ES:DI = 0000h:0000h
  6912. Return: ES:DI -> API entry point (see #1978)
  6913.           0000h:0000h if Configuration Manager not loaded
  6914. Note:    this API is often provided by a DOS device driver, in which case it
  6915.       is available whether or not MSWindows is running
  6916. Index:    installation check;Plug-and-Play Configuration Manager
  6917. SeeAlso: AX=1684h/BX=304Ch
  6918.  
  6919. (Table 1978)
  6920. Call Configuration Manager entry point with:
  6921.     AX = function
  6922.         0000h "CM_GetVersion" get supported DDI version
  6923.         Return: AH = BCD major version
  6924.             AL = BCD minor version
  6925.             BX = number of devices identified by configuration
  6926.         Note:    returns AX = 0000h if no config manager installed
  6927.         0001h "CM_GetConfig" get device configuration
  6928.         BX = device index
  6929.         ES:DI -> buffer for configuration information (see #1980)
  6930.         Return: AX = status
  6931.                 0000h successful
  6932.                 ES:DI buffer filled
  6933.                 other error code (0001h = index out of range)
  6934.         0002h "CM_LockConfig" lock device configuration
  6935.         ES:DI -> configuration information (see #1980)
  6936.         Return: AX = status
  6937.                 0000h successful
  6938.                 ES:DI buffer filled with assigned config
  6939.                 0001h resources conflict
  6940.                 0002h invalid request or configuration info
  6941.         0003h "CM_UnlockConfig" unlock device configuration
  6942.         ES:DI -> configuration information (see #1980)
  6943.         Return: AX = status
  6944.                 0000h successful
  6945.                 ES:DI buffer filled with assigned config
  6946.                 0001h invalid request or configuration info
  6947.         0004h "CME_QueryResources" get hot-swappable resources
  6948.         ES:DI -> configuration information (see #1980)
  6949.         Return: AX = status (see #1979)
  6950.         0005h "CME_AllocResources" remove resources from available pool
  6951.         ES:DI -> configuration information (see #1980)
  6952.         Return: AX = status (see #1979)
  6953.         0006h "CME_DeallocResources" return resources to available pool
  6954.         ES:DI -> configuration information (see #1980)
  6955.         Return: AX = status (see #1979)
  6956.  
  6957. (Table 1979)
  6958. Values for Configuration Manager status:
  6959.  00h    successful
  6960.  01h    device not found, configuration error
  6961.  02h    I/O port unavailable
  6962.  04h    IRQ unavailable
  6963.  08h    DMA channel unavailable
  6964.  10h    memory range unavailable
  6965. SeeAlso: #1978
  6966.  
  6967. Format of Configuration Information Structure:
  6968. Offset    Size    Description    (Table 1980)
  6969.  00h    DWORD    bus ID
  6970.  04h    DWORD    device ID
  6971.  08h    DWORD    serial number
  6972.  0Ch    DWORD    logical ID
  6973.  10h    DWORD    flags
  6974. ---ISA bus---
  6975.  14h    BYTE    Card Select Number
  6976.  15h    BYTE    logical device number
  6977.  16h    WORD    Read Data port
  6978. ------
  6979.  18h    WORD    number of memory windows
  6980.  1Ah  9 DWORDs    physical base addresses of memory windows
  6981.  3Eh  9 DWORDs    length of memory windows
  6982.  62h  9 WORDs    memory window attributes
  6983.  74h    WORD    number of I/O ports
  6984.  76h 20 WORDs    I/O port base addresses
  6985.  B6h 20 WORDs    lengths of I/O port ranges
  6986.  F6h    WORD    number of IRQs
  6987.  F8h  7 BYTEs    IRQ registers
  6988.  FFh  7 BYTEs    IRQ attributes
  6989. 106h    WORD    number of DMA channels
  6990. 108h  7 BYTEs    DMA channels used
  6991. 10Fh  7 WORDs    DMA channel attributes
  6992. 11Dh  3 BYTEs    reserved
  6993. SeeAlso: #1978
  6994. --------W-2F1684BX0444-----------------------
  6995. INT 2F - MS Windows - VADMAD - GET API ENTRY POINT
  6996.     AX = 1684h
  6997.     BX = 0444h (virtual device ID for VADMAD device) (see #1968)
  6998.     ES:DI = 0000h:0000h
  6999. Return: ES:DI -> VxD API entry point (see #1981)
  7000.           0000h:0000h if the VxD does not support an API
  7001.  
  7002. (Table 1981)
  7003. Call VADMAD entry point with:
  7004.     DX = operation
  7005.         0000h set VADMAD mode
  7006.         AX = desired mode
  7007.         0001h set VADMAD channel
  7008.         AX = desired channel
  7009. Note:    after setting mode/channel, start the DMA operation with an OUT to
  7010.       I/O port 0Bh (channels 0-3) or D6h (channels 4-7)
  7011. SeeAlso: #0674 at INT 20"Windows"
  7012. --------W-2F1684BX0750-----------------------
  7013. INT 2F - MS Windows - VSWITCHD - GET API ENTRY POINT
  7014.     AX = 1684h
  7015.     BX = 0750h (virtual device ID for VSWITCHD device) (see #1968)
  7016.     ES:DI = 0000h:0000h
  7017. Return: ES:DI -> VxD API entry point (see #1982)
  7018.           0000h:0000h if the VxD does not support an API
  7019.  
  7020. (Table 1982)
  7021. Call VSWITCHD entry point with:
  7022.     AX = function
  7023.         0000h toggle windowed mode (simulate Alt-Enter keypress)
  7024.         Return: nothing
  7025.         0001h get windowed mode
  7026.         Return: CF clear if VM is windowed
  7027.             CF set if VM is full-screen
  7028. --------W-2F1684BX28A0-----------------------
  7029. INT 2F - MS Windows - PHARLAPX - GET API ENTRY POINT
  7030.     AX = 1684h
  7031.     BX = 28A0h (virtual device ID for PHARLAPX device) (see #1968)
  7032.     ES:DI = 0000h:0000h
  7033. Return: ES:DI -> VxD API entry point (see #1983)
  7034.           0000h:0000h if the VxD does not support an API
  7035.  
  7036. (Table 1983)
  7037. Call PHARLAPX VxD entry point with:
  7038.     AX = function
  7039.         0001h get PHARLAP.386 version
  7040.         Return: AX = version number (AH = major, AL = minor)
  7041.     ---queue functions---
  7042.         0101h allocate a new message queue
  7043.         CX = size of queue data buffer in bytes
  7044.         Return: DX:AX = handle for new queue, or 0000h:0000h on error
  7045.         0102h allocate a new key queue
  7046.         CX = size of queue data buffer in bytes
  7047.         EDX = VM handle into which keys will be pasted
  7048.         Return: DX:AX = handle for new queue, or 0000h:0000h on error
  7049.         0103h free message queue
  7050.         EDX = queue handle
  7051.         Return: AX = status (0000h,0003h,0007h) (see #1984)
  7052.         0104h free key queue
  7053.         EDX = queue handle
  7054.         Return: AX = status (0000h,0003h,0005h) (see #1984)
  7055.         0105h add message to communications queue
  7056.         EDX = queue handle
  7057.         BX = length of message data in bytes
  7058.         CX = length of message header in bytes
  7059.         ES:(E)SI -> message header
  7060.         GS:(E)DI -> message data
  7061.         Return: AX = status (0000h-0003h,0007h) (see #1984)
  7062.         0106h remove message from queue
  7063.         EDX = queue handle
  7064.         CX = length of buffer in bytes
  7065.         ES:(E)SI -> buffer for message
  7066.         Return: AX = status (0000h,0003h,0006h,0007h,0008h) (see #1984)
  7067.             CX = length of returned message (if AX=0000h or 0008h)
  7068.         0107h flush queue (remove all data)
  7069.         EDX = queue handle
  7070.         Return: AX = status (0000h,0003h) (see #1984)
  7071.         0108h add PasteKey structure(s) to key queue
  7072.         EDX = queue handle
  7073.         CX = number of PasteKey structures in buffer
  7074.         ES:(E)SI -> PasteKey array (see #1985)
  7075.         Return: AX = status (0000h-0003h) (see #1984)
  7076.         0109h register enqueueing callback function
  7077.         EDX = queue handle
  7078.         ECX = function argument
  7079.         ES:(E)SI -> callback function
  7080.         Return: AX = status (0000h,0003h,0009h) (see #1984)
  7081.         010Ah register dequeueing callback function
  7082.         EDX = queue handle
  7083.         ECX = function argument
  7084.         ES:(E)SI -> callback function
  7085.         Return: AX = status (0000h,0003h,0009h) (see #1984)
  7086.         010Bh unregister enqueueing callback function
  7087.         EDX = queue handle
  7088.         Return: AX = status (0000h,0003h,0009h) (see #1984)
  7089.         010Ch unregister dequeueing callback function
  7090.         EDX = queue handle
  7091.         Return: AX = status (0000h,0003h,0009h) (see #1984)
  7092.         010Dh get message queue status
  7093.         EDX = queue handle
  7094.         Return: AX = status (0000h,0003h) (see #1984)
  7095.             CX = number of pending messages
  7096.         010Eh peek at message in queue
  7097.         EDX = queue handle
  7098.         BX = number of message in queue (0000h = first)
  7099.         CX = size of buffer in bytes
  7100.         ES:(E)SI -> buffer for message
  7101.         Return: AX = status (0000h,0003h,0006h,0008h) (see #1984)
  7102.             CX = length of returned message (if AX=0000h or 0008h)
  7103.         010Fh peek at last message in queue
  7104.         EDX = queue handle
  7105.         CX = size of buffer in bytes
  7106.         ES:(E)SI -> buffer for message
  7107.         Return: AX = status (0000h,0003h,0006h,0008h) (see #1984)
  7108.             CX = length of returned message (if AX=0000h or 0008h)
  7109.         0110h replace last message in queue
  7110.         EDX = queue handle
  7111.         CX = length of message header in bytes
  7112.         BX = length of message data in bytes
  7113.         ES:(E)SI -> message header
  7114.         GS:(E)DI -> message data
  7115.         Return: AX = status (0000h,0002h,0003h) (see #1984)
  7116.         0111h set permitted message count for queue
  7117.         EDX = queue handle
  7118.         CX = maximum number of messages to enqueue (FFFFh = unlimited)
  7119.         Return: AX = status (0000h,0003h) (see #1984)
  7120.     ---generalized VxD services---
  7121.         0202h call VxD function
  7122.         ES:(E)BX -> in/out register-set buffer
  7123.         Return: buffer updated
  7124.         0203h map flat
  7125.         ???
  7126.     --system register functions---
  7127.         0301h read system registers into buffer
  7128.         ES:(E)SI -> 512-byte buffer
  7129.         Return: AX = 0000h
  7130.             buffer filled (mostly zeros)
  7131.         0302h copy linear memory into buffer
  7132.         EDX = linear address
  7133.         CX = number of bytes to copy
  7134.         ES:(E)SI -> buffer
  7135.         Return: AX = 0000h
  7136.         0303h copy data into linear memory
  7137.         EDX = linear address
  7138.         CX = number of bytes to copy
  7139.         ES:(E)SI -> buffer
  7140.         Return: AX = 0000h
  7141.         0304h freeze VM
  7142.         ???
  7143.         0305h unfreeze VM
  7144.         ???
  7145.     ---name registration functions---
  7146.         0401h register name
  7147.         EDX = magic number to associate with name
  7148.         ES:(E)SI -> name to register
  7149.         Return: AX = status (0000h,0009h) (see #1984)
  7150.         0402h unregister name
  7151.         ES:(E)SI -> name to be unregistered
  7152.         Return: AX = status (0000h,0009h) (see #1984)
  7153.         0403h look up name
  7154.         ES:(E)SI -> name to look up
  7155.         Return: DX:AX = magic number or 0000h:0000h if not registered
  7156.         0404h get name list handle
  7157.         Return: DX:AX = name list handle
  7158.                 0000h:0000h if not initialized
  7159.     ---special DOS server routines (undocumented)---
  7160.         0501h register
  7161.         0502h unregister
  7162.         0503h validate VM
  7163.         0504h get INT9 count
  7164.         0505h get screen line
  7165.         0506h get shift status
  7166.         0507h get server PB pointer
  7167.         0508h initialize DOS shell
  7168.         0509h get last VM handle
  7169.  
  7170. (Table 1984)
  7171. Values for PHARLAPX function status:
  7172.  00h    successful
  7173.  01h    data is too large to fit in queue
  7174.  02h    queue is full
  7175.  03h    invalid queue handle
  7176.  04h    invalid VM handle for queue
  7177.  05h    error starting a paste operation
  7178.  06h    queue is empty
  7179.  07h    a VM is blocked waiting on the queue
  7180.  08h    message was too long (truncated)
  7181.  09h    unable to register or unregister specified callback
  7182. SeeAlso: #1983
  7183.  
  7184. Format of PHARLAPX PasteKey structure:
  7185. Offset    Size    Description    (Table 1985)
  7186.  00h    BYTE    ASCII code
  7187.  01h    BYTE    scan code (see #0005)
  7188.  02h    WORD    shift states
  7189. SeeAlso: #1983
  7190.  
  7191. Format of PHARLAPX VxD-call register structure:
  7192. Offset    Size    Description    (Table 1986)
  7193.  00h    DWORD    call number
  7194.  04h    WORD    input register map (see #1987)
  7195.  06h    WORD    output register map (see #1987)
  7196.  08h  7 DWORDs    values for EAX, EBX, ECX, EDX, EBP, ESI, EDI on call
  7197.  24h  4    WORDs    values for DS, ES, FG, GS on call
  7198.  2Ch    DWORD    EFLAGS on call
  7199.  30h  7 DWORDs    returned values of EAX, EBX, ECX, EDX, EBP, ESI, EDI
  7200.  4Ch  4 WORDs    returned values of DS, ES, FS, GS
  7201.  54h    DWORD    returned EFLAGS
  7202. SeeAlso: #1983
  7203.  
  7204. Bitfields for PHARLAPX VxD-call register map:
  7205. Bit(s)    Description    (Table 1987)
  7206.  0    value in EAX field is valid
  7207.  1    value in EBX field is valid
  7208.  2    value in ECX field is valid
  7209.  3    value in EDX field is valid
  7210.  4    value in EBP field is valid
  7211.  5    value in ESI field is valid
  7212.  6    value in EDI field is valid
  7213.  7    value in DS field is valid
  7214.  8    value in ES field is valid
  7215.  9    value in FS field is valid
  7216.  10    value in GS field is valid
  7217.  11    value in EFLAGS field is valid
  7218. SeeAlso: #1986
  7219. --------W-2F1684BX2925-----------------------
  7220. INT 2F - MS Windows - EDOS - GET API ENTRY POINT
  7221.     AX = 1684h
  7222.     BX = 2925h (virtual device ID for EDOS device) (see #1968)
  7223.     ES:DI = 0000h:0000h
  7224. Return: ES:DI -> VxD API entry point (see #1988)
  7225.           0000h:0000h if the VxD does not support an API
  7226.  
  7227. (Table 1988)
  7228. Call EDOS entry point with:
  7229.     AX = 0000h get EDOS version number
  7230.         Return: AH = major version
  7231.             AL = minor version
  7232.     AX = 0001h display message
  7233.         CX = 0
  7234.         DX:BX -> ASCIZ Message
  7235.     AX = 0002h get EDOS error coded
  7236.         Return: EAX = time in milliseconds that Windows has been running
  7237.     AX = 0003h execute windows program
  7238.         Return: EAX = cumulative amount of time the virtual machine has
  7239.             been active, in milliseconds
  7240.     AX = 0008h get/set priority
  7241.         BX = 0000h??? foreground
  7242.          0001h background
  7243.         DI = 0000h get
  7244.          0001h set
  7245.         DX = priority setting
  7246.         Return: CX = foreground priority
  7247.             DX = background priority
  7248.             BX:AX = flags
  7249.             00000001h exclusive ON
  7250.             00000010h background ON
  7251.             SI = CPU percentage
  7252. --------x-2F1684BX304C-----------------------
  7253. INT 2F - Intel Plug-and-Play - CONFIGURATION ACCESS - GET ENTRY POINT
  7254.     AX = 1684h
  7255.     BX = 304Ch (ID for Configuration Access) (see #1968)
  7256.     ES:DI = 0000h:0000h
  7257. Return: ES:DI -> API entry point (see #1989)
  7258.           0000h:0000h if Configuration Access not loaded
  7259. Note:    this API is often provided by a DOS device driver, in which case it
  7260.       is available whether or not MSWindows is running
  7261. Index:    installation check;Plug-and-Play Configuration Access
  7262. SeeAlso: AX=1684h/BX=0034h
  7263.  
  7264. (Table 1989)
  7265. Call Plug-and-Play Configuration Access entry point with:
  7266.     AX = function
  7267.         0000h "CA_GetVersion"
  7268.         Return: AX = BCD version (AH = major, AL = minor)
  7269.         0001h "CA_PCI_Read_Config_Byte" (see also INT 1A/AX=B108h)
  7270.     !!!
  7271.         0002h "CA_PCI_Read_Config_Word" (see also INT 1A/AX=B109h)
  7272.         0003h "CA_PCI_Read_Config_DWord" (see also INT 1A/AX=B10Ah)
  7273.         0004h "CA_PCI_Write_Config_Byte" (see also INT 1A/AX=B10Bh)
  7274.         0005h "CA_PCI_Write_Config_Word" (see also INT 1A/AX=B10Ch)
  7275.         0006h "CA_PCI_Write_Config_DWord" (see also INT 1A/AX=B10Dh)
  7276.         0007h "CA_PCI_Generate_Special_Cycle" (see also INT 1A/AX=B106h)
  7277.         0008h "CA_PCI_Get_Routing_Options" (see also INT 1A/AX=B10Eh)
  7278.         0009h invalid function
  7279.         000Ah invalid function
  7280.         000Bh "CA_PnPISA_Get_Info"
  7281.         000Ch "CA_PnPISA_Read_Config_Byte"
  7282.         000Dh "CA_PnPISA_Write_Config_Byte"
  7283.         000Eh "CA_PnPISA_Get_Resource_Data"
  7284.         000Fh invalid function
  7285.         0010h "CA_EISA_Get_Board_ID"
  7286.         0011h "CA_EISA_Get_Slot_Config"
  7287.         0012h "CA_EISA_Get_SlotFunc_Config"
  7288.         0013h "CA_EISA_Clear_NVRAM_Config"
  7289.         0014h "CA_EISA_Write_Config"
  7290.         0015h invalid function
  7291.         0016h "CA_ESCD_Get_Info"
  7292.         0017h "CA_ESCD_Read_Config"
  7293.         0018h "CA_ESCD_Write_Config"
  7294.         0019h invalid function
  7295.         001Ah "CA_Acfg_PCI_Manage_IRQs"
  7296.         DL = IRQ???
  7297.         ES:DI -> ???
  7298.         Return: AX = status
  7299.         001Bh "CA_Acfg_PCI_Get_Routing_Options"
  7300.         ES:DI -> IRQ routing table header
  7301.               (see #0666 at INT 1A/AX=B406h)
  7302.         Return: AX = status
  7303.         001Ch-001Fh invalid functions
  7304.         0020h "CA_PnPB_Get_Num_Sys_Dev_Nodes"
  7305.         0021h "CA_PnPB_Get_Sys_Dev_Node"
  7306.         0022h "CA_PnPB_Set_Sys_Dev_Node"
  7307.         0023h "CA_PnPB_Get_Stat_Res_Info"
  7308.         0024h "CA_PnPB_Set_Stat_Res_Info"
  7309. Return: AX = FFFFh if unsupported function
  7310. --------W-2F1684BX310E-----------------------
  7311. INT 2F - MS Windows - WPS - GET API ENTRY POINT
  7312.     AX = 1684h
  7313.     BX = 310Eh (virtual device ID for WPS device) (see #1968)
  7314.     ES:DI = 0000h:0000h
  7315. Return: ES:DI -> VxD API entry point (see #1990)
  7316.           0000h:0000h if the VxD does not support an API
  7317.  
  7318. (Table 1990)
  7319. Call WPS protected-mode entry point with:
  7320.     DX = function
  7321.         0000h get WPS.386 version
  7322.         Return: CF clear
  7323.             AX = version (AH = major, AL = minor)
  7324.         0001h get number of installed VxDs
  7325.         Return: CF clear
  7326.             AX = number of installed VxDs
  7327.         0002h get VxD characteristics
  7328.         AX = number of VxD
  7329.         ES:BX -> buffer for VxD characteristics structure (see #1991)
  7330.         Return: CF clear
  7331.             ES:BX buffer filled
  7332.  
  7333. Format of WPS.386 VxD characteristics structure:
  7334. Offset    Size    Description    (Table 1991)
  7335.  00h    WORD    VxD ID number
  7336.  02h    BYTE    VxD minor version
  7337.  03h    BYTE    VxD major version
  7338.  04h    BYTE    DDK minor version
  7339.  05h    BYTE    DDK major version
  7340.  06h    WORD    flags
  7341.         bit 0: V86 API supported
  7342.         bit 1: PM API supported
  7343.         bit 2: services supported
  7344.  08h    DWORD    start order
  7345.  0Ch  9 BYTEs    ASCIZ VxD name
  7346. --------W-2F1684BX31CF-----------------------
  7347. INT 2F - MS Windows - STAT.386 - GET API ENTRY POINT
  7348.     AX = 1684h
  7349.     BX = 31CFh (virtual device ID for STAT.386) (see #1968)
  7350.     ES:DI = 0000h:0000h
  7351. Return: ES:DI -> VxD API entry point (see #1992)
  7352.           0000h:0000h if the VxD does not support an API
  7353.  
  7354. (Table 1992)
  7355. Call STAT.386 entry point with:
  7356.     AX = function
  7357.         0000h get version
  7358.         Return: AX = STAT.386 version (AH = major, AL = minor)
  7359.         0001h execute RDMSR/WRMSR/RDTSC
  7360.         BH = 00h
  7361.         BL = second opcode byte (30h=WRMSR,31h=RDTSC,32h=RDMSR)
  7362.         EDX:EDI = value to be written (for BL=30h)
  7363.         ECX = MSR number for RDMSR/WRMSR
  7364.         Return: EDX:EAX = value read (RDTSR/RDMSR only)
  7365. ----------2F1684BX377B-----------------------
  7366. INT 2F - MS Windows - MX1501HAD - GET API ENTRY POINT
  7367.     AX = 1684h
  7368.     BX = 377Bh (virtual device ID for MX1501HAD device)
  7369.     ES:DI = 0000h:0000h
  7370. Return: ES:DI -> VxD API entry point (see #1993)
  7371.           0000h:0000h if the VxD does not support an API
  7372. Note:    The drivers VCMD95C.VXD and VCMD.386 are part of the driver disks
  7373.       provided with the chip-card-reader/keyboard combination MX 1501 HAD,
  7374.       produced by Cherry
  7375.  
  7376. (Table 1993)
  7377. Call CHERRY VCMD95C.VXD entry point with:
  7378.     AX = function
  7379.         0001h get version
  7380.         Return: AX = version number (0100h) (AH = major, AL = minor)
  7381.         0002h hook INT 09 (and 8???)
  7382.         0003h unhook INT 09 (and 8???)
  7383.         0004h get number of bytes in FIFO
  7384.         Return: AX = bytes in FIFO
  7385.         0005h get next FIFO-data
  7386.         Return: AX = data
  7387.             BL = port number
  7388.             BH = direction (1=in, 0=out)
  7389.             DX:CX = timestamp
  7390.         0006h clear FIFO
  7391.         0007h output byte
  7392.         DX = port number
  7393.         BL = keyboard command
  7394.         Return: data in FIFO (see #1995)
  7395.                (value, port, in/out, timestamp)
  7396.         0008h input byte
  7397.         DX = port number
  7398.         Return: data in FIFO (see #1995)
  7399.             (value, port, in/out, timestamp)
  7400.         0009h input byte immediately
  7401.         DX = port number
  7402.         Return: AX = data
  7403.         000Ah read next FIFO data (nondestructive)
  7404.         Return: AX = data
  7405.             BL = port number
  7406.             BH = direction (1=in, 0=out)
  7407.             DX:CX = timestamp
  7408.         000Bh get timestamp
  7409.         Return: DX:CX = timestamp (in ms)
  7410.         000Ch enable IRQ 1
  7411.         000Dh disable IRQ 1
  7412.         000Eh enable data retrieval
  7413.         Note:    Sets a flag in the internal mode-byte which
  7414.               tells the driver to recognize the data
  7415.         000Fh disable data retrieval
  7416.         Note:    resets a flag in the internal mode-byte
  7417.         0010h get retrieval mode
  7418.         Return: AX = current retrieval mode
  7419.         0011h set retrieval mode
  7420.         BX = new retrieval mode (see #1994)
  7421.         Return: AX = old retrieval mode
  7422.         0012h get command value
  7423.         Return: AX = command value
  7424.         0013h set command value
  7425.         BX = command value
  7426.  
  7427. Bitfields for retrieval mode:
  7428. Bit(s)    Description    (Table 1994)
  7429.  0    enable data retrieval
  7430.  1    0 = interrupt-driven
  7431.     1 = polling mode
  7432.  2    0 = read port 60h everytime
  7433.     1 = read port 60h only when OBF of port 64h is set
  7434.  3    0 = don't call old INT 9
  7435.     1 = call INT 9 before our INT-handler
  7436.  4-7    reserved
  7437. SeeAlso: #1993,#1995
  7438.  
  7439. Structure of FIFO entry (1024 entries in FIFO):
  7440. Offset    Size    Description    (Table 1995)
  7441.  00h    BYTE    data byte
  7442.  01h    BYTE    I/O port
  7443.  02h    BYTE    direction (1=in, 0=out)
  7444.  03h    BYTE    reserved
  7445.  04h    DWORD    timestamp
  7446. SeeAlso: #1993,#1994
  7447. --------W-2F1684BX8888-----------------------
  7448. INT 2F - MS Windows - POSTMSG - GET API ENTRY POINT
  7449.     AX = 1684h
  7450.     BX = 8888h (virtual device ID for POSTMSG device) (see #1968)
  7451.     ES:DI = 0000h:0000h
  7452. Return: ES:DI -> VxD API entry point (see #1996,#1998)
  7453.           0000h:0000h if the VxD does not support an API
  7454.  
  7455. (Table 1996)
  7456. Call POSTMSG protected-mode entry point with:
  7457.     AX = window handle
  7458.     CX:BX -> callback procedure (see #1997)
  7459. Return: nothing
  7460. Note:    this call registers a WinApp with the VxD; the callback must be in a
  7461.       fixed, non-discardable code segment
  7462. SeeAlso: #1998
  7463.  
  7464. (Table 1997)
  7465. Values POSTMSG callback routine is called with:
  7466.     STACK:    DWORD    "lParam" parameter from DOSApp
  7467.         WORD    "wParam" parameter from DOSApp
  7468.         WORD    Windows message number (WM_USER + 100)
  7469.         DWORD    registered hwnd
  7470.  
  7471. (Table 1998)
  7472. Call POSTMSG V86-mode entry point with:
  7473.     BX = wParam value to pass to protected-mode callback
  7474.     DX:AX = lParam value to pass to protected-mode callback
  7475. Return: CF clear if successful
  7476.     CF set on error (no WinApp registered)
  7477. SeeAlso: #1996
  7478. --------W-2F1684BX8888-----------------------
  7479. INT 2F - MS Windows - VbillD - GET API ENTRY POINT
  7480.     AX = 1684h
  7481.     BX = 8888h (virtual device ID for VbillD device) (see #1968)
  7482.     ES:DI = 0000h:0000h
  7483. Return: ES:DI -> VxD API entry point (see #1999)
  7484.           0000h:0000h if the VxD does not support an API
  7485.  
  7486. (Table 1999)
  7487. Call VbillD entry point with:
  7488.     AX = function
  7489.         0001h set reverse video
  7490.         0002h set normal video
  7491. Return: ???
  7492. --------W-2F1685-----------------------------
  7493. INT 2F - MS Windows - SWITCH VMs AND CALLBACK
  7494.     AX = 1685h
  7495.     BX = VM ID of virtual machine to switch to
  7496.     CX = flags (see #2000)
  7497.     DX:SI = priority boost (refer to VMM.INC)
  7498.     ES:DI -> FAR procedure to callback
  7499. Return: CF set on error
  7500.         AX = error code
  7501.         01h invalid VM ID
  7502.         02h invalid priority boost
  7503.         03h invalid flags
  7504.     CF clear if successful
  7505.         event will be or has been called
  7506. Notes:    some DOS devices, such as networks, need to call functions in a
  7507.       specific VM. This call forces the appropriate VM to be installed.
  7508.     the callback procedure must preserve all registers and return with IRET
  7509. SeeAlso: AX=1683h,INT 15/AX=1117h,AX=DB06h"WINGO"
  7510.  
  7511. Bitfields for VM switching flags:
  7512. Bit(s)    Description    (Table 2000)
  7513.  0    wait until interrupts enabled
  7514.  1    wait until critical section unowned
  7515.  2-15    reserved (zero)
  7516. --------E-2F1686-----------------------------
  7517. INT 2F - DOS Protected-Mode Interface - DETECT MODE
  7518.     AX = 1686h
  7519. Return: AX = 0000h if operating in protected mode under DPMI (INT 31 available)
  7520.     AX nonzero if in real/V86 mode or no DPMI (INT 31 not available)
  7521. SeeAlso: AX=1687h
  7522. --------E-2F1687-----------------------------
  7523. INT 2F - DOS Protected-Mode Interface - INSTALLATION CHECK
  7524.     AX = 1687h
  7525. Return: AX = 0000h if installed
  7526.         BX = flags
  7527.         bit 0: 32-bit programs supported
  7528.         CL = processor type (02h=80286, 03h=80386, 04h=80486)
  7529.         DH = DPMI major version
  7530.         DL = two-digit DPMI minor version (binary)
  7531.         SI = number of paragraphs of DOS extender private data
  7532.         ES:DI -> DPMI mode-switch entry point (see #2001)
  7533.     AX nonzero if not installed
  7534. SeeAlso: AX=1686h,AX=43E0h,AX=DE01h/BX=4450h,AX=FB42h/BX=0001h
  7535. SeeAlso: INT 31/AX=0400h,INT 31/AX=5702h,INT D4/AH=10h
  7536.  
  7537. (Table 2001)
  7538. Call DPMI mode switch entry point with:
  7539.     AX = flags
  7540.         bit 0: set if 32-bit program
  7541.     ES = real mode segment of buffer for DPMI private data (ignored if
  7542.         SI was zero)
  7543. Return: CF set on error
  7544.         program still in real mode
  7545.         AX = error code (DPMI 1.0+)
  7546.            8011h unable to allocate all necessary descriptors
  7547.            8021h 32-bit program specified, but 16-bit DPMI host
  7548.     CF clear if successful
  7549.         CS = 16-bit selector corresponding to real-mode CS
  7550.         SS = selector corresponding to real-mode SS (64K limit)
  7551.         DS = selector corresponding to real-mode DS (64K limit)
  7552.         ES = selector to program's PSP (100h byte limit)
  7553.         FS = GS = 0
  7554.         high word of ESP = 0 if 32-bit program
  7555.         program now in protected mode
  7556. Note:    this entry point is only called for the initial switch to protected
  7557.       mode
  7558. --------W-2F1688BX0BAD-----------------------
  7559. INT 2F U - MS Windows 3.0, 386MAX v6.01 - GET ALIAS SELECTOR TO LDT
  7560.     AX = 1688h
  7561.     BX = 0BADh
  7562. Return: AX = 0000h if supported
  7563.         BX = alias selector for LDT
  7564. Note:    use the LSL instruction or GetSelectorLimit() to find LDT size
  7565.     this call should be considered obsolete for Windows 3.1+, as the
  7566.       alias selector can be retrieved via the API entry point for
  7567.       "MS-DOS" retrieved from INT 2F/AX=168Ah (see #2003)
  7568. --------W-2F1689-----------------------------
  7569. INT 2F U - MS Windows 3.0+ - KERNEL IDLE CALL
  7570.     AX = 1689h
  7571.     ???
  7572. Return: ???
  7573. SeeAlso: AX=1680h,INT 15/AX=1000h,INT 28
  7574. --------E-2F168A-----------------------------
  7575. INT 2F - DPMI 0.9+ - GET VENDOR-SPECIFIC API ENTRY POINT
  7576.     AX = 168Ah
  7577.     DS:(E)SI = selector:offset of ASCIZ vendor name (see #2002)
  7578. Return: AL = status
  7579.         00h successful
  7580.            ES:(E)DI -> extended API entry point
  7581.         8Ah unsuccessful
  7582. Notes:    the vendor name is used to determine which entry point to return; it is
  7583.       case-sensitive
  7584.     available in protected mode only
  7585.     32-bit applications use ESI and EDI, 16-bit applications use SI and DI
  7586.     this call is present but not documented for DPMI 0.9
  7587.     the Borland C++ 3.1 DPMILOAD does not handle requests for entry points
  7588.       other than the MS-DOS one gracefully, producing an unhandled
  7589.       exception report; this has been fixed in the Borland Pascal 7 version
  7590. SeeAlso: INT 31/AX=0A00h,INT 31/AH=57h
  7591.  
  7592. (Table 2002)
  7593. Values for DPMI vendor-specific API names:
  7594.  "MS-DOS"    MS Windows and 386MAX v6.00+ (see #2003)
  7595.  "386MAX"    386MAX v6.00+
  7596.  "HELIX_DPMI"    Helix Netroom's DPMI server
  7597.  "Phar Lap"    Phar Lap 286|DOS-Extender RUN286 (see #2004)
  7598.  "RATIONAL DOS/4G"  DOS/4G, DOS/4GW
  7599.  
  7600. (Table 2003)
  7601. Call Windows-support ("MS-DOS") entry point with:
  7602.     AX = 0100h get LDT alias selector
  7603. Return: CF clear if successful
  7604.         AX = alias selector
  7605.     CF set on error
  7606.  
  7607. (Table 2004)
  7608. Call Phar Lap RUN286 entry point with:
  7609.     AX = 0000h (function "load MSW")
  7610.     BX = new value for MSW register (low word of CR0)
  7611. Return: ???
  7612. --------W-2F168B-----------------------------
  7613. INT 2F - MS Windows 3.1 - SET FOCUS TO SPECIFIED VIRTUAL MACHINE
  7614.     AX = 168Bh
  7615.     BX = virtual machine ID (see AX=1683h), 0000h for current DOS box
  7616. Return: AL = 00h if focus set to specified VM
  7617. Notes:    documented on the Microsoft Developer's Network CD-ROM
  7618.     if the VM is a windowed DOS box, it will be set to full screen
  7619. SeeAlso: AX=1683h
  7620. --------W-2F168C-----------------------------
  7621. INT 2F - MS Windows 3.1 - RESTART COMMAND
  7622.     AX = 168Ch
  7623.     ???
  7624. Return: ???
  7625. Note:    WIN.COM executes specified application
  7626. --------W-2F168EDX0000-----------------------
  7627. INT 2F - Windows95 - TITLE - SET APPLICATION TITLE
  7628.     AX = 168Eh
  7629.     DX = 0000h
  7630.     ES:DI -> ASCIZ application title (max 79 chars+NUL)
  7631. Return: AX = status
  7632.         0000h failed
  7633.         0001h successful
  7634. Note:    if ES:DI is 0000h:0000h or points at an empty string, the current
  7635.       title is removed
  7636. BUG:    this function can return a successful status even though the title was
  7637.       not changed
  7638. SeeAlso: AX=168Eh/DX=0001h,AX=168Eh/DX=0002h
  7639. --------W-2F168EDX0001-----------------------
  7640. INT 2F - Windows95 - TITLE - SET VIRTUAL MACHINE TITLE
  7641.     AX = 168Eh
  7642.     DX = 0001h
  7643.     ES:DI -> ASCIZ virtual machine title (max 29 chars+NUL)
  7644. Return: AX = status
  7645.         0000h failed
  7646.         0001h successful
  7647. Notes:    if ES:DI is 0000h:0000h or points at an empty string, the current
  7648.       title is removed
  7649.     the VM title should only be changed on explicit instruction from the
  7650.       user
  7651. BUG:    this function can return a successful status even though the title was
  7652.       not changed
  7653. SeeAlso: AX=168Eh/DX=0000h,AX=168Eh/DX=0003h
  7654. --------W-2F168EDX0002-----------------------
  7655. INT 2F - Windows95 - TITLE - GET APPLICATION TITLE
  7656.     AX = 168Eh
  7657.     DX = 0002h
  7658.     ES:DI -> buffer for ASCIZ application title
  7659.     CX = size of buffer in bytes
  7660. Return: AX = status
  7661.         0000h failed
  7662.         0001h successful
  7663. Desc:    copy as much of the application's window title as possible to the given
  7664.       buffer, appending a terminating NUL to the buffer
  7665. SeeAlso: AX=168Eh/DX=0000h,AX=168Eh/DX=0003h
  7666. --------W-2F168EDX0003-----------------------
  7667. INT 2F - Windows95 - TITLE - GET VIRTUAL MACHINE TITLE
  7668.     AX = 168Eh
  7669.     DX = 0003h
  7670.     ES:DI -> buffer for ASCIZ virtual-machine title
  7671.     CX = size of buffer in bytes
  7672. Return: AX = status
  7673.         0000h failed
  7674.         0001h successful
  7675. Desc:    copy as much of the virtual machine's title as possible to the given
  7676.       buffer, appending a terminating NUL to the buffer
  7677. SeeAlso: AX=168Eh/DX=0001h,AX=168Eh/DX=0002h
  7678. --------W-2F168FDH00-------------------------
  7679. INT 2F - Windows95 - CLOSE-AWARENESS - ENABLE/DISABLE CLOSE COMMAND
  7680.     AX = 168Fh
  7681.     DH = 00h
  7682.     DL = new state
  7683.         00h disabled
  7684.         01h enabled
  7685. Return: AX = status
  7686.         0000h successful
  7687.         else failed
  7688. Desc:    enable or disable the system menu Close command for an application
  7689. SeeAlso: AX=168Fh/DH=01h,AX=168Fh/DH=02h
  7690. --------W-2F168FDH01-------------------------
  7691. INT 2F - Windows95 - CLOSE-AWARENESS - QUERY CLOSE
  7692.     AX = 168Fh
  7693.     DH = 01h
  7694.     DL = 00h (reserved)
  7695. Return: AX = status
  7696.         0000h Close command selected but not yet acknowledged
  7697.         0001h Close command issued and acknowledged
  7698.         168Fh Close command not selected -- application should continue
  7699. Desc:    determine whether the user has requested that the application be closed
  7700.       by selecting the system menu's Close option
  7701. SeeAlso: AX=168Fh/DH=00h,AX=168Fh/DH=02h
  7702. --------W-2F168FDH02-------------------------
  7703. INT 2F - Windows95 - CLOSE-AWARENESS - ACKNOWLEDGE CLOSE
  7704.     AX = 168Fh
  7705.     DH = 02h
  7706.     DL = 00h (reserved)
  7707. Return: AX = status
  7708.         0000h successful
  7709.         else failed
  7710. Note:    once a Close command has been issued, no further keyboard input is
  7711.       available to the application until it calls this function to
  7712.       acknowledge the Close request
  7713. SeeAlso: AX=168Fh/DH=00h,AX=168Fh/DH=03h
  7714. --------W-2F168FDH03-------------------------
  7715. INT 2F - Windows95 - CLOSE-AWARENESS - CANCEL CLOSE
  7716.     AX = 168Fh
  7717.     DH = 03h
  7718.     DL = 00h (reserved)
  7719. Return: AX = status
  7720.         0000h successful
  7721.         else failed
  7722. Desc:    cancels a close request which has already been acknowledged if the
  7723.       application determines that it will not exit at this time
  7724. SeeAlso: AX=168Fh/DH=00h,AX=168Fh/DH=03h
  7725. --------W-2F1700-----------------------------
  7726. INT 2F - MS Windows "WINOLDAP" - IDENTIFY WinOldAp VERSION
  7727.     AX = 1700h
  7728. Return: AX = 1700h if this version of WINOLDAP doesn't support clipboard
  7729.     AX <> 1700h
  7730.         AL = WINOLDAP major version
  7731.         AH = WINOLDAP minor version
  7732. Program: WinOldAp (WINOLDAP.MOD) is a Microsoft Windows extension supporting
  7733.       "old" (character-mode) application access to Dynamic Data Exchange,
  7734.       menus, and the Windows clipboard.
  7735. Note:    this installation check DOES NOT follow the format used by other
  7736.       software of returning AL=FFh
  7737. SeeAlso: AX=1701h,AX=4601h
  7738. Index:    installation check;WINOLDAP
  7739. --------W-2F1701-----------------------------
  7740. INT 2F - MS Windows "WINOLDAP" - OPEN CLIPBOARD
  7741.     AX = 1701h
  7742. Return: AX = status
  7743.         nonzero success
  7744.         0000h   clipboard is already open
  7745. SeeAlso: AX=1700h,AX=1702h,AX=1703h,AX=1704h,INT 16/AX=CB00h
  7746. --------W-2F1702-----------------------------
  7747. INT 2F - MS Windows "WINOLDAP" - EMPTY CLIPBOARD
  7748.     AX = 1702h
  7749. Return: AX = status
  7750.         nonzero clipboard has been emptied
  7751.         0000h   failure
  7752. SeeAlso: AX=1700h,AX=1701h,AX=1703h,AX=1704h,INT 16/AX=CB05h
  7753. --------W-2F1703-----------------------------
  7754. INT 2F - MS Windows "WINOLDAP" - SET CLIPBOARD DATA
  7755.     AX = 1703h
  7756.     DX = clipboard format supported by WinOldAp (see #2005)
  7757.     ES:BX -> data (see #2006,#2007)
  7758.     SI:CX = size of data
  7759. Return: AX = status
  7760.         nonzero data copied into the Clipboard
  7761.         0000h   failure
  7762. SeeAlso: AX=1701h,AX=1705h,INT 16/AX=CB04h
  7763.  
  7764. (Table 2005)
  7765. Values for WinOldAp clipboard format:
  7766.  01h    text
  7767.  02h    bitmap
  7768.  03h    metafile picture
  7769.  04h    SYLK
  7770.  05h    DIF
  7771.  06h    TIFF
  7772.  07h    OEM text
  7773.  08h    DIB bitmap
  7774.  80h    special format (used by Windows WRITE, maybe other Windows applets???)
  7775.  81h    DSP text
  7776.  82h    DSP bitmap
  7777.  
  7778. Format of Windows Clipboard bitmap:
  7779. Offset    Size    Description    (Table 2006)
  7780.  00h    WORD    type (0000h)
  7781.  02h    WORD    width of bitmap in pixels
  7782.  04h    WORD    height of bitmap in pixels
  7783.  06h    WORD    bytes per line
  7784.  08h    BYTE    number of color planes
  7785.  09h    BYTE    number of adjacent color bits in pixel
  7786.  0Ah    DWORD    pointer to start of data
  7787.  0Eh    WORD    width in 0.1mm units
  7788.  10h    WORD    height in 0.1mm units
  7789.  12h  N BYTEs    bitmap data
  7790.  
  7791. Format of Windows metafile picture:
  7792. Offset    Size    Description    (Table 2007)
  7793.  00h    WORD    mapping mode
  7794.  02h    WORD    X extent
  7795.  04h    WORD    Y extent
  7796.  06h    WORD    picture data
  7797. --------W-2F1704-----------------------------
  7798. INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA SIZE
  7799.     AX = 1704h
  7800.     DX = clipboard format supported by WinOldAp (see #2005)
  7801. Return: DX:AX = size of data in bytes, including any headers
  7802.         0000h:0000h if no data in this format in the Clipboard
  7803. Note:    Windows reportedly rounds up the size of the data to a multiple of 32
  7804.       bytes
  7805. SeeAlso: AX=1700h,AX=1703h,AX=1705h
  7806. --------W-2F1705-----------------------------
  7807. INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA
  7808.     AX = 1705h
  7809.     DX = clipboard format supported by WinOldAp (see #2005)
  7810.     ES:BX -> buffer
  7811. Return: AX = status
  7812.         nonzero success
  7813.         0000h   error, or no data in this format in Clipboard
  7814. SeeAlso: AX=1700h,AX=1704h,INT 16/AX=CB03h
  7815. --------W-2F1708-----------------------------
  7816. INT 2F - MS Windows "WINOLDAP" - CloseClipboard
  7817.     AX = 1708h
  7818. Return: AX = status
  7819.         0000h failure
  7820.         nonzero success
  7821. --------W-2F1709-----------------------------
  7822. INT 2F - MS Windows "WINOLDAP" - COMPACT CLIPBOARD
  7823.     AX = 1709h
  7824.     SI:CX = desired size in bytes
  7825. Return: DX:AX = number of bytes in largest block of free memory
  7826. Note:    WinOldAp is responsible for including the size of any headers
  7827. --------W-2F170A-----------------------------
  7828. INT 2F - MS Windows "WINOLDAP" - GET DEVICE CAPABILITIES
  7829.     AX = 170Ah
  7830.     DX = GDI information index (see #2008)
  7831. Return: AX = integer value of the desired item
  7832.           (see #2009,#2010,#2011,#2012,#2013,#2014,#2015)
  7833. Note:    This function returns the device-capability bits for the given display
  7834.  
  7835. (Table 2008)
  7836. Values for GDI information index:
  7837.  00h    device driver version
  7838.  02h    device classification
  7839.  04h    width in mm
  7840.  06h    height in mm
  7841.  08h    width in pixels
  7842.  0Ah    height in pixels
  7843.  0Ch    bits per pixel
  7844.  0Eh    number of bit planes
  7845.  10h    number of brushes supported by device
  7846.  12h    number of pens supported by device
  7847.  14h    number of markers supported by device
  7848.  16h    number of fonts supported by device
  7849.  18h    number of colors
  7850.  1Ah    size required for device descriptor
  7851.  1Ch    curve capabilities
  7852.  1Eh    line capabilities
  7853.  20h    polygon capabilities
  7854.  22h    text capabilities
  7855.  24h    clipping capabilities
  7856.  26h    bitblt capabilities
  7857.  28h    X aspect
  7858.  2Ah    Y aspect
  7859.  2Ch    length of hypotenuse of aspect
  7860.  58h    logical pixels per inch of width
  7861.  5Ah    logical pixels per inch of height
  7862. SeeAlso: #2009,#2010,#2011,#2012,#2013,#2014,#2015
  7863.  
  7864. (Table 2009)
  7865. Values for device classification:
  7866.  00h    vector plotter
  7867.  01h    raster display
  7868.  02h    raster printer
  7869.  03h    raster camera
  7870.  04h    character-stream, PLP
  7871.  05h    Metafile, VDM
  7872.  06h    display-file
  7873. SeeAlso: #2008,#2010,#2011,#2012,#2013,#2014,#2015
  7874.  
  7875. Bitfields for curve capabilities:
  7876. Bit(s)    Description    (Table 2010)
  7877.  0    circles
  7878.  1    pie wedges
  7879.  2    chord arcs
  7880.  3    ellipses
  7881.  4    wide lines
  7882.  5    styled lines
  7883.  6    wide styled lines
  7884.  7    interiors
  7885. SeeAlso: #2008,#2009,#2011,#2012,#2013,#2014,#2015
  7886.  
  7887. Bitfields for line capabilities:
  7888. Bit(s)    Description    (Table 2011)
  7889.  1    polylines
  7890.  2    markers
  7891.  3    polymarkers
  7892.  4    wide lines
  7893.  5    styled lines
  7894.  6    wide styled lines
  7895.  7    interiors
  7896. SeeAlso: #2008,#2009,#2010,#2012,#2013,#2014,#2015
  7897.  
  7898. Bitfields for polygon capabilities:
  7899. Bit(s)    Description    (Table 2012)
  7900.  0    polygons
  7901.  1    rectangles
  7902.  2    trapezoids
  7903.  3    scanlines
  7904.  4    wide borders
  7905.  5    styled borders
  7906.  6    wide styled borders
  7907.  7    interiors
  7908. SeeAlso: #2008,#2009,#2010,#2011,#2013,#2014,#2015
  7909.  
  7910. Bitfields for text capabilities:
  7911. Bit(s)    Description    (Table 2013)
  7912.  0    output precision character
  7913.  1    output precision stroke
  7914.  2    clippping precision stroke
  7915.  3    90-degree character rotation
  7916.  4    arbitrary character rotation
  7917.  5    independent X and Y scaling
  7918.  6    double-size
  7919.  7    integer scaling
  7920.  8    continuous scaling
  7921.  9    bold
  7922.  10    italic
  7923.  11    underline
  7924.  12    strikeout
  7925.  13    raster fonts
  7926.  14    vector fonts
  7927.  15    reserved
  7928. SeeAlso: #2008,#2009,#2010,#2011,#2012,#2014,#2015
  7929.  
  7930. (Table 2014)
  7931. Values for clipping capabilities:
  7932.  00h    none
  7933.  01h    clipping to rectangles
  7934. SeeAlso: #2008,#2009,#2010,#2011,#2012,#2013,#2015
  7935.  
  7936. Bitfields for raster capabilities:
  7937. Bit(s)    Description    (Table 2015)
  7938.  0    simple bitBLT
  7939.  1    device requires banding support
  7940.  2    device requires scaling support
  7941.  3    supports >64K bitmap
  7942. SeeAlso: #2008,#2009,#2010,#2011,#2012,#2013,#2014
  7943. ----------2F18-------------------------------
  7944. INT 2F U - MS-Manager
  7945.     AH = 18h
  7946.     ???
  7947. Return: ???
  7948. --------l-2F1900-----------------------------
  7949. INT 2F U - DOS 4.x only SHELLB.COM - INSTALLATION CHECK
  7950.     AX = 1900h
  7951. Return: AL = status
  7952.         00h not installed
  7953.         FFh installed
  7954. --------l-2F1901-----------------------------
  7955. INT 2F U - DOS 4.x only SHELLB.COM - SHELLC.EXE INTERFACE
  7956.     AX = 1901h
  7957.     BL = SHELLC type
  7958.         00h transient
  7959.         01h resident
  7960.     DS:DX -> far call entry point for resident SHELLC.EXE
  7961. Return: ES:DI -> SHELLC.EXE workspace within SHELLB.COM
  7962. Note:    SHELLB.COM and SHELLC.EXE are parts of the DOS 4.x shell
  7963. --------l-2F1902-----------------------------
  7964. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM INTERFACE
  7965.     AX = 1902h
  7966.     ES:DI -> ASCIZ full filename of current batch file, with at least the
  7967.           final filename element uppercased
  7968.     DS:DX -> buffer for results
  7969. Return: AL = 00h  failed, either
  7970.         (a) final filename element quoted at ES:DI does not match
  7971.               identity of shell batch file quoted as parameter of most
  7972.               recent call of SHELLB command, or
  7973.         (b) no more Program Start Commands available.
  7974.     AL= FFh     success, then:
  7975.         memory at DS:[DX+1] onwards filled as:
  7976.         DX+1:    BYTE    count of bytes of PSC
  7977.         DX+2: N BYTEs    Program Start Command text
  7978.             BYTE    0Dh terminator
  7979. Desc:    COMMAND.COM executes the result of this call in preference to
  7980.       reading a command from a batch file.    Thus the batch file does not
  7981.       advance in execution for so long as SHELLB provides PSCs from its
  7982.       workspace.
  7983. Note:    The PSCs are planted in SHELLB workspace by SHELLC, the user
  7984.       menu interface.  The final PSC of a sequence is finished with a
  7985.       GOTO COMMON, which causes a loop back in the batch file which called
  7986.       SHELLC so as to execute SHELLC again.     The check on batch file name
  7987.       permits PSCs to CALL nested batch files while PSCs are still stacked
  7988.       up for subsequent execution.
  7989. --------l-2F1903-----------------------------
  7990. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM interface
  7991.     AX = 1903h
  7992.     ES:DI -> ASCIZ batch file name as for AX=1902h
  7993. Return: AL = status
  7994.         FFh quoted batch file name matches last SHELLB parameter
  7995.         00h it does not
  7996. --------l-2F1904-----------------------------
  7997. INT 2F U - DOS 4.x only SHELLB.COM - SHELLB transient to TSR intrface
  7998.     AX = 1904h
  7999. Return: ES:DI -> name of current shell batch file:
  8000.         WORD    number of bytes of name following
  8001.         BYTEs    (8 max) uppercase name of shell batch file
  8002. ----------2F1980-----------------------------
  8003. INT 2F U - IBM ROM-DOS v4.0 - INSTALLATION CHECK
  8004.     AX = 1980h
  8005. Return: AL = FFh if ??? installed/supported
  8006. Note:    called at the very beginning of SHELLSTB.COM, which exits if AL is not
  8007.       FFh on return
  8008. SeeAlso: AX=1981h,AX=1982h
  8009. ----------2F1981-----------------------------
  8010. INT 2F U - IBM ROM-DOS v4.0 - GET ??? STRING
  8011.     AX = 1981h
  8012.     DS:DX -> buffer for ???
  8013. Return: AL = status
  8014.         FFh if successful
  8015.         DS:DX buffer filled (refer to note below)
  8016.         81h on error
  8017. Note:    the first byte of the buffer is unchanged; depending on a byte in
  8018.       IBMBIO.COM, the remainder of the buffer is filled with either
  8019.       "C:\ROMSHELL.COM",0Dh or xxh,xxh,0Fh,"C:\ROMSHELL.COM",0Dh
  8020. SeeAlso: AX=1980h,AX=1982h
  8021. ----------2F1982-----------------------------
  8022. INT 2F U - IBM ROM-DOS v4.0 - GET ??? TABLE
  8023.     AX = 1982h
  8024. Return: AL = FFh if supported
  8025.         ES:DI -> ??? table (see #2016)
  8026. Note:    called by ROMSHELL.COM
  8027. SeeAlso: AX=1980h,AX=1981h
  8028.  
  8029. Format of ROM-DOS v4.0 ??? table:
  8030. Offset    Size    Description    (Table 2016)
  8031.  00h    BYTE    ??? (00h)
  8032.  01h    BYTE    ??? (41h) (ROMSHELL.COM checks if =00h)
  8033.  02h    BYTE    ??? (00h) (ROMSHELL.COM checks if =01h)
  8034.  03h    WORD    ??? (0001h) (ROMSHELL.COM checks if =0001h)
  8035.  05h    BYTE    ??? (00h)
  8036.  06h    WORD    ??? (04D5h)
  8037. --------V-2F1A00-----------------------------
  8038. INT 2F - DOS 4.0+ ANSI.SYS - INSTALLATION CHECK
  8039.     AX = 1A00h
  8040. Return: AL = FFh if installed
  8041. Notes:    AVATAR.SYS also responds to this call
  8042.     documented for DOS 5+, but undocumented for DOS 4.x
  8043. --------V-2F1A00BX414E-----------------------
  8044. INT 2F - ANSIPLUS.SYS v2.00+ - INSTALLATION CHECK
  8045.     AX = 1A00h
  8046.     BX = 414Eh ('AN')
  8047.     CX = 5349h ('SI')
  8048.     DX = 2B2Bh ('++')
  8049. Return: AL = FFh if installed
  8050.         CF clear
  8051.         ES:BX -> INT 29 entry point
  8052.         CX = ANSIPLUS BCD version number (v3.10+, CH=major, CL=minor)
  8053.         DL = capabilities (v4.00+)
  8054.         00h full capability driver
  8055.         01h reduced capability driver
  8056.         2Bh full capability driver (before v4.00)
  8057. Program: ANSIPLUS.SYS is a CON device driver by Kristofer Sweger which
  8058.       replaces the normal ANSI.SYS with a more powerful version having
  8059.       many additional features
  8060. Notes:    ANSIPLUS also identifies itself as ANSI.SYS if BX,CX, or DX differ
  8061.       from the magic values above
  8062.     an additional installation check is to test for the signature
  8063.       "ANSIPLUS" 12 bytes before the INT 29 entry point; the version
  8064.       number is also available as a four-character ASCII string (e.g.
  8065.       "4.00") four bytes before the entry point
  8066. SeeAlso: AX=1AA5h,AX=1AA6h,AX=1AA7h,AX=1AA8h,AX=1AA9h,AX=1AAAh,AX=D44Fh
  8067. --------V-2F1A00BX4156-----------------------
  8068. INT 2F - AVATAR.SYS - INSTALLATION CHECK
  8069.     AX = 1A00h
  8070.     BX = 4156h ('AV')
  8071.     CX = 4154h ('AT')
  8072.     DX = 4152h ('AR')
  8073. Return: AL = FFh if installed
  8074.         CF clear
  8075.         BX = AVATAR protocol level supported
  8076.         CX = driver type
  8077.         0000h AVATAR.SYS
  8078.         4456h DVAVATAR.COM inside DESQview window
  8079.         DX = 0016h
  8080. Program: AVATAR.SYS is a CON replacement by George Adam Stanislav which
  8081.       interprets AVATAR command codes in the same way that ANSI interprets
  8082.       ANSI command codes
  8083. Notes:    AVATAR also identifies itself as ANSI.SYS if BX, CX, or DX differ from
  8084.       the magic values
  8085. SeeAlso: AX=1A21h,AX=1A3Ch,AX=1A3Fh,AX=1A52h,AX=1A72h,AX=1A7Dh,AX=1AADh"AVATAR"
  8086. --------V-2F1A01-----------------------------
  8087. INT 2F U - DOS 4.0+ ANSI.SYS internal - GET/SET DISPLAY INFORMATION
  8088.     AX = 1A01h
  8089.     CL = function
  8090.         7Fh for GET
  8091.         5Fh for SET
  8092.     DS:DX -> parm block as for INT 21,AX=440Ch,CX=037Fh/035Fh respectively
  8093. Return: CF clear if successful
  8094.         AX destroyed
  8095.     CF set on error
  8096.         AX = error code (many non-standard)
  8097. Note:    presumably this is the DOS IOCTL interface to ANSI.SYS
  8098. SeeAlso: AX=1A02h,INT 21/AX=440Ch
  8099. --------V-2F1A02-----------------------------
  8100. INT 2F U - DOS 4.0+ ANSI.SYS internal - MISCELLANEOUS REQUESTS
  8101.     AX = 1A02h
  8102.     DS:DX -> parameter block (see #2017)
  8103. Return: CF clear if successful
  8104.     CF set on error
  8105.         AX = error code
  8106. Note:    DOS 5+ chains to previous handler if AL > 02h on call
  8107. SeeAlso: AX=1A01h
  8108.  
  8109. Format of ANSI.SYS parameter block:
  8110. Offset    Size    Description    (Table 2017)
  8111.  00h    BYTE    subfunction
  8112.         00h set/reset interlock
  8113.         01h get /L flag
  8114.  01h    BYTE    interlock state
  8115.         00h=reset, 01h=set
  8116.           This interlock prevents some of the ANSI.SYS post-processing
  8117.           in its hook onto INT 10, AH=00h mode set
  8118.  02h    BYTE    (returned)
  8119.         00h if /L not in effect
  8120.         01h if /L in effect
  8121. --------V-2F1A21-----------------------------
  8122. INT 2F - AVATAR.SYS - SET DRIVER STATE
  8123.     AX = 1A21h (AL='!')
  8124.     DS:SI -> command string with one or more state characters (see #2018)
  8125.     CX = length of command string
  8126. Return: CF set on error (invalid subfunction)
  8127.     CF clear if successful
  8128. Note:    the characters in the state string are interpreted left to right, and
  8129.       need not be in any particular order
  8130. SeeAlso: AX=1A00h/BX=4156h,AX=1A3Fh
  8131.  
  8132. (Table 2018)
  8133. Values for AVATAR.SYS state characters:
  8134.  'a'    activate driver
  8135.  'd'    disable driver
  8136.  'f'    use fast screen output
  8137.  'g'    always convert gray keys (+ and -) to function keys
  8138.  'G'    never convert gray keys
  8139.  'l'    convert gray keys only when ScrollLock active
  8140.  's'    use slow screen output
  8141.  't'    Tandy 1000 keyboard (not yet implemented)
  8142. --------V-2F1A3C-----------------------------
  8143. INT 2F U - AVATAR.SYS v0.11 - ???
  8144.     AX = 1A3Ch
  8145.     ???
  8146. Return: CX = 0000h
  8147. SeeAlso: AX=1A00h/BX=4156h,AX=1A21h,AX=1A3Eh
  8148. --------V-2F1A3E-----------------------------
  8149. INT 2F U - AVATAR.SYS v0.11 - ???
  8150.     AX = 1A3Eh
  8151.     CL = ???
  8152.     CH = ???
  8153.     DL = ???
  8154.     DH = ???
  8155. Return: CL = ???
  8156.     CH = ???
  8157.     DL = ???
  8158.     DH = ???
  8159. SeeAlso: AX=1A3Ch,AX=1A3Fh
  8160. --------V-2F1A3F-----------------------------
  8161. INT 2F - AVATAR.SYS - QUERY DRIVER STATE
  8162.     AX = 1A3Fh (AL='?')
  8163.     ES:DI -> buffer
  8164.     CX = length of buffer in bytes
  8165. Return: CF clear
  8166.     CX = actual size of returned info
  8167. Note:    the returned information consists of multiple letters whose meanings
  8168.       are described under AX=1A21h
  8169. SeeAlso: AX=1A00h/BX=4156h,AX=1A21h,AX=1A44h
  8170. --------S-2F1A42BX4156-----------------------
  8171. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ3 HANDLER
  8172.     AX = 1A42h
  8173.     BX = 4156h ('AV')
  8174.     ES:DI -> FAR handler for serial port using IRQ3
  8175.     DS = data segment needed by handler
  8176. Return: AX = status/return value
  8177.         0000h if no more room
  8178.         1A42h if ASD not installed
  8179.         else handle to use when uninstalling
  8180. Notes:    the handler need not save/restore registers or signal EOI to the
  8181.       interrupt controller
  8182.     the handler should return AX=0000h if the interrupt was meant for it,
  8183.       and either leave AX unchanged or return a non-zero value otherwise
  8184.     the most recently installed handler will be called first, continuing
  8185.       to earlier handlers until one returns AX=0000h
  8186. SeeAlso: AX=1A43h,AX=1A62h
  8187. --------S-2F1A43BX4156-----------------------
  8188. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ4 HANDLER
  8189.     AX = 1A43h
  8190.     BX = 4156h ('AV')
  8191.     ES:DI -> FAR handler for serial port using IRQ4
  8192.     DS = data segment needed by handler
  8193. Return: AX = status/return value
  8194.         0000h if no more room
  8195.         1A43h if ASD not installed
  8196.         else handle to use when uninstalling
  8197. Notes:    (see AX=1A42h)
  8198. SeeAlso: AX=1A42h,AX=1A63h
  8199. --------V-2F1A44BX4156-----------------------
  8200. INT 2F - AVATAR.SYS v0.11+ - GET DATA SEGMENT
  8201.     AX = 1A44h
  8202.     BX = 4156h ('AV')
  8203. Return: AX = 0000h
  8204.     DS = data segment
  8205.     CX = size of data segment
  8206. Note:    AVATAR.SYS calls this function whenever it is invoked.    If each
  8207.       process under a multitasker hooks this function and provides a
  8208.       separate data segment, AVATAR.SYS becomes fully reentrant.
  8209. SeeAlso: AX=1A21h,AX=1A3Fh,AX=1A52h
  8210. --------V-2F1A52-----------------------------
  8211. INT 2F U - AVATAR.SYS v0.11 - GET ???
  8212.     AX = 1A52h
  8213.     CX = size of buffer
  8214.     ES:DI -> buffer
  8215. Return: ??? copied into user buffer
  8216. Note:    the maximum size of the data which may be copied is returned by
  8217.       AX=1A72h
  8218. SeeAlso: AX=1A53h,AX=1A72h
  8219. --------V-2F1A53-----------------------------
  8220. INT 2F U - AVATAR.SYS v0.11 - ???
  8221.     AX = 1A53h
  8222.     CL = ??? (00h-05h)
  8223.     ???
  8224. Return: ???
  8225. SeeAlso: AX=1A00h/BX=4156h,AX=1A52h,AX=1A72h
  8226. --------S-2F1A62BX4156-----------------------
  8227. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ3 HANDLER
  8228.     AX = 1A62h
  8229.     BX = 4156h ('AV')
  8230.     CX = handle for IRQ routine returned by AX=1A42h
  8231. SeeAlso: AX=1A42h,AX=1A63h
  8232. --------S-2F1A63BX4156-----------------------
  8233. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ4 HANDLER
  8234.     AX = 1A63h
  8235.     BX = 4156h ('AV')
  8236.     CX = handle for IRQ routine returned by AX=1A43h
  8237. SeeAlso: AX=1A43h,AX=1A62h
  8238. --------V-2F1A72-----------------------------
  8239. INT 2F U - AVATAR.SYS v0.11 - GET ??? SIZE
  8240.     AX = 1A72h
  8241. Return: CX = maximum size of ???
  8242. SeeAlso: AX=1A00h/BX=4156h,AX=1A52h,AX=1A7Bh,AX=1AADh"AVATAR"
  8243. --------V-2F1A7B-----------------------------
  8244. INT 2F U - AVATAR.SYS v0.11 - ???
  8245.     AX = 1A7Bh
  8246. Return: AX = 0000h
  8247.     CX = 0000h
  8248. SeeAlso: AX=1A00h/BX=4156h,AX=1A72h,AX=1A7Dh
  8249. --------V-2F1A7D-----------------------------
  8250. INT 2F U - AVATAR.SYS v0.11 - ???
  8251.     AX = 1A7Dh
  8252. Return: AX = ???
  8253. SeeAlso: AX=1A00h/BX=4156h,AX=1A7Bh
  8254. --------V-2F1AA3-----------------------------
  8255. INT 2F - ANSIPLUS v4.03+ - GET/SET ANSIPLUS INTERNAL VARIABLES
  8256.     AX = 1AA3h
  8257.     BH = function
  8258.         00h get current/default colors
  8259.         Return: CH = default colors
  8260.             CL = current colors
  8261.         01h set current/default colors
  8262.         CH = default colors (00h = leave unchanged)
  8263.         CL = current colors
  8264.         02h get current subscreen region
  8265.         Return: BH,BL = true screen rows,columns
  8266.             CH,CL = top left row,column of region
  8267.             DH,DL = bottom right row,column of region
  8268.         03h set subscreen region
  8269.         CH,CL = top left row,column of region
  8270.         DH,DL = bottom right row,column of region
  8271.         04h get driver features (bits 0-31)
  8272.         Return: DX:CX = current feature bits
  8273.         05h set driver features (bits 0-31)
  8274.         DX:CX = feature bits
  8275.         06h get driver features (bits 32-63)
  8276.         Return: DX:CX = current feature bits
  8277.         07h set driver features (bits 32-63)
  8278.         DX:CX = feature bits
  8279.         other: reserved for future use
  8280. SeeAlso: AX=1AA4h,AX=1AA5h
  8281. --------V-2F1AA4-----------------------------
  8282. INT 2F - ANSIPLUS v4.02+ - GET/SET ANSIPLUS SMOOTH SCROLLING RATE
  8283.     AX = 1AA4h
  8284.     BL = function
  8285.         00h get scrolling rate
  8286.         01h set scrolling rate
  8287.         BH = new minimum scrolling rate in scan lines per retrace
  8288. Return: BH = smooth scrolling rate
  8289. SeeAlso: AX=1AA3h,AX=1AA5h
  8290. --------V-2F1AA5-----------------------------
  8291. INT 2F - ANSIPLUS v4.00+ - GET/SET ANSIPLUS CLIPBOARD
  8292.     AX = 1AA5h
  8293.     DH = subfunction
  8294.         00h get clipboard information
  8295.         01h get clipboard text
  8296.         02h set clipboard text
  8297.         03h append text to clipboard
  8298.         04h clear clipboard
  8299.         05h paste clipboard to keyboard
  8300.     ES:BX -> data area for subfunctions 01h, 02h, and 03h
  8301.     CX = size of data area (maximum size for subfunction 01h, actual size
  8302.         to add to clipboard for subfunctions 02h and 03h)
  8303. Return: AL = status
  8304.         00h successful
  8305.         01h unsupported subfunction (reduced capability driver)
  8306.         02h insufficient space
  8307.         A5h unsupported function (ANSIPLUS before v4.00)
  8308.     ES:BX -> ANSIPLUS local clipboard data
  8309.     CX = number of bytes currently in local clipboard
  8310.     DX = maximum size of local clipboard
  8311. SeeAlso: AX=1A00h/BX=414Eh,AX=1AA4h,AX=1AA6h
  8312. --------V-2F1AA6-----------------------------
  8313. INT 2F - ANSIPLUS v4.00+ - ENABLE/DISABLE ANSIPLUS DRIVER
  8314.     AX = 1AA6h
  8315.     BH = function
  8316.         00h get hooked interrupts
  8317.         01h set hooked interrupts mask
  8318.         BL = new interrupts mask (see #2019)
  8319. Return: BL = previous interrupts mask (see #2019)
  8320. SeeAlso: AX=1A00h/BX=414Eh,AX=1AA7h
  8321.  
  8322. Desc:    used to temporarily disable any prior copies of ANSIPLUS when a new
  8323.       copy is installed, such as in a multitasking system like DESQview
  8324. Note:    only the most-recently loaded copy of ANSIPLUS on the current INT 2F
  8325.       chain responds to this call
  8326.  
  8327. Bitfields for ANSIPLUS hooked interrupts mask:
  8328. Bit(s)    Description    (Table 2019)
  8329.  0    INT 09 hook disabled
  8330.  1    INT 10 hook disabled
  8331.  2    INT 15 hook disabled
  8332.  3    INT 16 hook disabled
  8333.  4    INT 1C hook disabled
  8334.  5    reset all bits when INT 29 called
  8335.  6    INT 29 hook disabled
  8336.  7    INT 33, INT 74, or other mouse event hook disabled
  8337. --------V-2F1AA7-----------------------------
  8338. INT 2F - ANSIPLUS v4.00+ - ENABLE/DISABLE ANSIPLUS FEATURES
  8339.     AX = 1AA7h
  8340.     BL = function
  8341.         00h prevent scroll-back saves
  8342.         01h enable scroll-back saves
  8343.         02h disable key reprogramming and lock changes by escape sequences
  8344.         03h enable key reprogramming by escape sequences
  8345.         04h    disable and lock key stacking changes by escape sequences
  8346.         05h allow key stacking by escape sequences
  8347. Return: nothing
  8348. SeeAlso: AX=1AA6h
  8349. --------V-2F1AA8-----------------------------
  8350. INT 2F - ANSIPLUS v3.10+ - GET NEXT ANSIPLUS SCROLLBACK LINE
  8351.     AX = 1AA8h
  8352. Return: AL = status
  8353.         00h successful
  8354.         ES:BX -> screen line (character and attribute pairs)
  8355.         CX = length of line in bytes, 0000h if no more lines or
  8356.               unsupported video mode
  8357.         01h unsupported video mode active
  8358.         02h screen currently scrolled back
  8359.         03h reduced capability driver
  8360.         A8h unsupported function (driver before v3.10)
  8361. SeeAlso: AX=1A00h/BX=414Eh,AX=1AA9h
  8362. --------V-2F1AA9-----------------------------
  8363. INT 2F - ANSIPLUS v3.10+ - GET ANSIPLUS SCROLLBACK INFORMATION
  8364.     AX = 1AA9h
  8365. Return: AL = status
  8366.         00h successful
  8367.         BX = current number of lines in scrollback buffer
  8368.         CX = number of bytes in one line
  8369.         01h unsupported video mode active
  8370.         02h screen currently scrolled back
  8371.         03h reduced capability driver
  8372.         A9h unsupported function (driver before v3.10)
  8373. Desc:    determine how much data is in the scrollback buffer and initialize
  8374.       scrollback retrieval to return the first line on the next call to
  8375.       AX=1AA8h
  8376. SeeAlso: AX=1A00h/BX=414Eh,AX=1AA8h
  8377. --------V-2F1AAA-----------------------------
  8378. INT 2F - ANSIPLUS v3.01+ - GET/SET ANSIPLUS SCREEN SAVER BLANKING TIME
  8379.     AX = 1AAAh
  8380.     BX = function
  8381.         FFFFh to get current blanking time
  8382.         other to set time
  8383.         CX = blanking time in clock ticks (0000h-7FFFh)
  8384. Return: BX = current blanking time
  8385.     CX = blanking time when last set
  8386. SeeAlso: AX=1A00h/BX=414Eh,AX=1AABh
  8387. --------V-2F1AAB-----------------------------
  8388. INT 2F - ANSIPLUS v3.01+ - SET ANSIPLUS KEY REPEAT RATE
  8389.     AX = 1AABh
  8390.     BX = repeat rate in characters per second
  8391.         0000h use BIOS repeat rate
  8392. Return: nothing
  8393. SeeAlso: AX=1A00h/BX=414Eh,AX=1AAAh,AX=1AACh
  8394. --------V-2F1AAC-----------------------------
  8395. INT 2F - ANSIPLUS v3.00+ - LOAD CHARACTER GENERATOR
  8396.     AX = 1AACh
  8397.     BH = number of bytes per character pattern
  8398.     BL = VGA/EGA character table to be loaded
  8399.     CX = number of characters to load
  8400.     DX = starting character code (offset into Map2 block)
  8401.     ES:BP -> user character table to be loaded
  8402. Return: AX = 1100h
  8403. Desc:    load the EGA/VGA character generator without the BIOS function's
  8404.       side effects of resetting the video mode and color palette
  8405. SeeAlso: AX=1A00h/BX=414Eh,AX=1AABh,AX=1AADh"ANSIPLUS",INT 10/AX=1100h
  8406. --------V-2F1AAD-----------------------------
  8407. INT 2F - ANSIPLUS v2.00+ - ANSIPLUS DEVICE STATUS REPORT
  8408.     AX = 1AADh
  8409.     BL = report request code (81h-96h for v4.00)
  8410.     CX = color selector or key code, if required by request
  8411. Return: AX = first reported result
  8412.     BX = second result
  8413.     CX = third result, if applicable (unchanged otherwise)
  8414.     DX = fourth result, if applicable (unchanged otherwise)
  8415. Desc:    get device status reports equivalent to those for Esc [#n sequences
  8416.       while bypassing any device redirection and avoiding the need to
  8417.       parse the returned result
  8418. Note:    the report request code in BL is identical to the number in the
  8419.       corresponding Esc [#n sequence
  8420. SeeAlso: AX=1A00h/BX=414Eh,AX=1AACh
  8421. --------V-2F1AADDX0000-----------------------
  8422. INT 2F U - AVATAR.SYS v0.11 - ???
  8423.     AX = 1AADh
  8424.     DX = 0000h
  8425.     CX = subfunction (00h-0Ch)
  8426.     ???
  8427. Return: AX = 0000h if DX was nonzero
  8428.     ???
  8429. SeeAlso: AX=1A00h/BX=4156h,AX=1A72h
  8430. --------m-2F1B00-----------------------------
  8431. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - INSTALLATION CHECK
  8432.     AX = 1B00h
  8433. Return: AL = FFh if installed
  8434. Note:    XMA2EMS.SYS extension is only installed if DOS has page frames to hide.
  8435.     This extension hooks onto INT 67/AH=58h and returns from that call data
  8436.       which excludes the physical pages being used by DOS.
  8437. SeeAlso: AH=1Bh"FRAME INFO"
  8438. --------m-2F1B-------------------------------
  8439. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - GET HIDDEN FRAME INFORMATION
  8440.     AH = 1Bh
  8441.     AL <> 00h
  8442.     DI = hidden physical page number
  8443. Return: AX = FFFFh if failed (no such hidden page)
  8444.     AX = 0000h if OK, then
  8445.         ES = segment of page frame
  8446.         DI = physical page number
  8447. Notes:    this corresponds to the data edited out of the INT 67/AH=58h call
  8448.     FASTOPEN makes this call with AL = FFh
  8449. SeeAlso: AX=1B00h
  8450. --------V-2F2300-----------------------------
  8451. INT 2F - DR DOS 5.0 GRAFTABL - INSTALLATION CHECK
  8452.     AX = 2300h
  8453. Return: AH = FFh
  8454. Note:    this installation check does not follow the usual format
  8455. SeeAlso: AH=23h,AX=2E00h
  8456. --------V-2F23-------------------------------
  8457. INT 2F - DR DOS 5.0 GRAFTABL - GET GRAPHICS DATA
  8458.     AH = 23h
  8459.     AL nonzero
  8460. Return: AH = FFh
  8461.     ES:BX -> graphics data (8 bytes for each character from 80h to FFh)
  8462. SeeAlso: AX=2300h,AX=2E00h
  8463. --------T-2F2700-----------------------------
  8464. INT 2F - DR DOS 6.0 TaskMAX - INSTALLATION CHECK
  8465.     AX = 2700h
  8466. Return: AL = status
  8467.         00h not installed
  8468.         FFh installed
  8469. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in both
  8470.       taskswitching and multitasking modes
  8471. --------T-2F2701-----------------------------
  8472. INT 2F - DR DOS 6.0 TaskMAX - GET STATUS
  8473.     AX = 2701h
  8474. Return: AX = maximum simultaneous tasks
  8475.     BX = index into TASK_IDS of current foreground task
  8476.     CX = currently-active tasks
  8477.     DX = version number (DL = major, DH = minor)
  8478.         (DR DOS 6.0 = 0001h, Novell DOS 7 = 0002h)
  8479.     ES:SI -> TASK_IDS
  8480.     ES:DI -> name table (array of 8-byte names, NUL-terminated if <8 chars)
  8481. Notes:    do not attempt to create a new task if CX == AX
  8482.     the task's index is its position on the task menu, while its ID is the
  8483.       position within the internal task name table
  8484. SeeAlso: AX=2714h,AX=2716h
  8485. --------T-2F2702-----------------------------
  8486. INT 2F - DR DOS 6.0 TaskMAX - GET PER-TASK EMS LIMIT
  8487.     AX = 2702h
  8488. Return: DX = maximum pages INT 67/AH=42h will report available
  8489. Note:    TaskMAX does not limit EMS allocations other than by limiting the
  8490.       amount which is reported as being available at a given time
  8491. SeeAlso: AX=2703h,INT 67/AH=42h
  8492. --------T-2F2703-----------------------------
  8493. INT 2F - DR DOS 6.0 TaskMAX - SET PER-TASK EMS LIMIT
  8494.     AX = 2703h
  8495.     DX = maximum pages INT 67/AH=42h should report available
  8496. Return: DX = new maximum for reporting
  8497. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in
  8498.       both taskswitching and multitasking modes
  8499. SeeAlso: AX=2702h,INT 67/AH=42h
  8500. --------T-2F2704-----------------------------
  8501. INT 2F - DR DOS 6.0 TaskMAX - REGISTER/UNREGISTER TASK MANAGER
  8502.     AX = 2704h
  8503.     DL = subfunction
  8504.         00h unregister task manager
  8505.         01h register task manager
  8506. Return: DL = status
  8507.         00h registered
  8508.         01h unregistered
  8509. Notes:    a task manager replaces TaskMAX's menu system with its own user
  8510.       interface; while one is registered, the TaskMAX hotkeys and
  8511.       Ctrl-Alt-Del invoke the manager rather than the built-in menu system
  8512.     unregister the task manager before terminating it
  8513. SeeAlso: AX=2705h
  8514. Index:    hotkeys;TaskMAX
  8515. --------T-2F2705-----------------------------
  8516. INT 2F - DR DOS 6.0 TaskMAX - ENABLE/DISABLE DIRECT SWITCHING
  8517.     AX = 2705h
  8518.     DL = subfunction
  8519.         00h disable keystrokes for switching to next/prev/specified task
  8520.         01h enable
  8521. Return: nothing
  8522. Note:    should only be called by a registered task manager (see AX=2704h)
  8523. SeeAlso: AX=2704h,AX=2706h
  8524. --------T-2F2706-----------------------------
  8525. INT 2F - DR DOS 6.0 TaskMAX - SWITCH TO SPECIFIED TASK
  8526.     AX = 2706h
  8527.     DX = task index (see AX=2701h) of task to be activated
  8528. Return: DX = task index of previously-active task
  8529. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in
  8530.       both taskswitching and multitasking modes
  8531. SeeAlso: AX=2705h,AX=2707h,AX=2715h
  8532. --------T-2F2707-----------------------------
  8533. INT 2F - DR DOS 6.0 TaskMAX - CREATE NEW TASK
  8534.     AX = 2707h
  8535.     DS:DX -> ASCIZ pathname of executable
  8536.     ES:BX -> parameter block (see #2020)
  8537.     CX = number of ticks before automatic return to task manager
  8538.         (0000h = run until termination or explicitly switched)
  8539. Return: DX = new task's task index (FFFFh if task terminated)
  8540. SeeAlso: AX=2706h,AX=2708h
  8541.  
  8542. Format of TaskMAX parameter block:
  8543. Offset    Size    Description    (Table 2020)
  8544.  00h    WORD    reserved, should be 0000h
  8545.  02h    DWORD    pointer to command tail to be copied into child's PSP
  8546.  06h    DWORD    pointer to first FCB to be copied into child's PSP
  8547.  0Ah    DWORD    pointer to second FCB to be copied into child's PSP
  8548. --------T-2F2708-----------------------------
  8549. INT 2F - DR DOS 6.0 TaskMAX - DELETE TASK
  8550.     AX = 2708h
  8551.     DX = task index
  8552. Return: DX = FFFFh (task deleted)
  8553. Notes:    this call should only be used for abnormal task termination, after
  8554.       first checking for open files with AX=270Ch; should not be used
  8555.       with programs that allocate EMS or XMS memory
  8556.     switches to specified task first
  8557. SeeAlso: AX=2707h
  8558. --------T-2F2709-----------------------------
  8559. INT 2F - DR DOS 6.0 TaskMAX - NAME TASK
  8560.     AX = 2709h
  8561.     DX = task index
  8562.     DS:SI -> 8-byte name (8 NULs = remove name)
  8563. Return: AL = task flags
  8564.         00h ID unused or task terminated
  8565.         01h ID in use, task name table entry valid
  8566.         81h ID in use, task name fixed
  8567.     BX = task ID
  8568.     ES:DI -> name in task name table (see AX=2701h)
  8569. Note:    the task retains the given name until it terminates or the name is
  8570.       removed by specifying a name of 8 NULs.
  8571. SeeAlso: AX=2701h,AX=2707h
  8572. --------T-2F270A-----------------------------
  8573. INT 2F - DR DOS 6.0 TaskMAX - CONVERT TASK INDEX TO TASK ID
  8574.     AX = 270Ah
  8575.     DX = task index
  8576. Return: DX = task ID (FFFFh if index invalid)
  8577. Note:    task IDs stay constant, while indexes can change when other tasks are
  8578.       deleted
  8579. SeeAlso: AX=2701h,AX=270Bh
  8580. --------T-2F270B-----------------------------
  8581. INT 2F - DR DOS 6.0 TaskMAX - CONVERT TASK ID TO TASK INDEX
  8582.     AX = 270Bh
  8583.     DX = task ID
  8584. Return: DX = task index (FFFFh if task not active)
  8585. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in both
  8586.       taskswitching and multitasking modes
  8587. SeeAlso: AX=270Ah
  8588. --------T-2F270C-----------------------------
  8589. INT 2F - DR DOS 6.0 TaskMAX - CHECK OPEN FILES
  8590.     AX = 270Ch
  8591.     DX = task index
  8592. Return: AX = number of files currently open for specified task
  8593. SeeAlso: AX=2708h
  8594. --------T-2F270D-----------------------------
  8595. INT 2F - DR DOS 6.0 TaskMAX - CHECK IF TASK RUNNING PRIMARY COMMAND INTERPRETER
  8596.     AX = 270Dh
  8597.     DX = task index
  8598. Return: DX = status
  8599.         0000h if primary command interpreter (COMMAND.COM, etc.) running
  8600.         0001h if not in root shell for task
  8601. Note:    TaskMAX will return 0001h if the specified task has spawned another
  8602.       command interpreter with AX=2707h
  8603. SeeAlso: AX=2707h,AX=270Ch
  8604. --------T-2F270E-----------------------------
  8605. INT 2F - DR DOS 6.0 TaskMAX - GET/SET TEXT PASTE LEAD-IN
  8606.     AX = 270Eh
  8607.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  8608.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  8609. Return: ES:DI -> current lead-in string
  8610. Note:    the specified sequence of keystrokes is sent to the application before
  8611.       every line of a text-mode spreadsheet paste
  8612. SeeAlso: AX=270Fh,AX=2710h,AX=2713h
  8613. --------T-2F270F-----------------------------
  8614. INT 2F - DR DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE LEAD-IN
  8615.     AX = 270Fh
  8616.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  8617.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  8618. Return: ES:DI -> current lead-in string
  8619. Note:    the specified sequence of keystrokes is sent to the application before
  8620.       every number in a numeric-mode spreadsheet paste
  8621. SeeAlso: AX=270Eh,AX=2710h,AX=2711h,AX=2713h
  8622. --------T-2F2710-----------------------------
  8623. INT 2F - DR DOS 6.0 TaskMAX - GET/SET PASTE LINE TERMINATOR STRING
  8624.     AX = 2710h
  8625.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  8626.     DS:SI -> pasting terminator string (character/scan-code pairs)
  8627. Return: ES:DI -> current terminator string
  8628. Note:    the specified sequence of keystrokes is sent to the application after
  8629.       every line of a spreadsheet paste operation
  8630. SeeAlso: AX=270Eh,AX=270Fh,AX=2713h
  8631. --------T-2F2711-----------------------------
  8632. INT 2F - DR DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE DECIMAL POINT
  8633.     AX = 2711h
  8634.     DX = ASCII code for separator (FFFFh to get current)
  8635. Return: DL = current separator character
  8636. SeeAlso: AX=270Fh
  8637. --------T-2F2712-----------------------------
  8638. INT 2F - DR DOS 6.0 TaskMAX - INITIATE EXPORTING TASK DATA
  8639.     AX = 2712h
  8640.     DX = task index
  8641. --------T-2F2713-----------------------------
  8642. INT 2F - DR DOS 6.0 TaskMAX - INITIATE PASTE OPERATION
  8643.     AX = 2713h
  8644.     DX = task index
  8645.     CX = paste mode
  8646.         0000h alphanumeric
  8647.         0001h numeric
  8648.         0002h text
  8649. SeeAlso: AX=270Eh,AX=270Fh,AX=2710h,AX=2711h
  8650. --------T-2F2714-----------------------------
  8651. INT 2F - DR DOS 6.0 TaskMAX - GET SWAP SPACE INFO
  8652.     AX = 2714h
  8653. Return: CX = total KB of swap space
  8654.     DX = available KB of swap space
  8655. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in both
  8656.       taskswitching and multitasking modes
  8657. SeeAlso: AX=2701h
  8658. --------T-2F2715-----------------------------
  8659. INT 2F - DR DOS 6.0 TaskMAX - SWITCH TO TASK MANAGER
  8660.     AX = 2715h
  8661. Return: only after calling task is again selected
  8662. SeeAlso: AX=2706h
  8663. --------T-2F2716-----------------------------
  8664. INT 2F - DR DOS 6.0 TaskMAX - GET PASTE BUFFER STATUS
  8665.     AX = 2716h
  8666. Return: AX = 0000h if AX=2716h,AX=2717h,AX=2718h supported
  8667.         CX = bytes in paste buffer
  8668.         DX = current generation number (updated after every copy operation)
  8669. BUG:    Novell DOS 7 TASKMGR returns AX=0000h even though it does not support
  8670.       this call (it does support the remainder of the TaskMAX API)
  8671. SeeAlso: AX=2701h,AX=2713h,AX=2714h,AX=2717h,AX=2718h
  8672. --------T-2F2717-----------------------------
  8673. INT 2F - DR DOS 6.0 TaskMAX - PASTE DATA DIRECTLY TO APPLICATION BUFFER
  8674.     AX = 2717h
  8675.     CX = bytes in destination buffer
  8676.     ES:DI -> destination buffer
  8677. Return: AX = 0000h if function supported
  8678.         CX = bytes actually copied (FFFFh if buffer too small)
  8679.         DX = current generation number for paste buffer
  8680. BUG:    Novell DOS 7 TASKMGR returns AX=0000h even though it does not support
  8681.       this call (it does support the remainder of the TaskMAX API)
  8682. Note:    the destination buffer may be too small if another task adds more data
  8683.       to the paste buffer after the AX=2716h call but before this call
  8684. SeeAlso: AX=2713h,AX=2716h,AX=2718h
  8685. --------T-2F2718-----------------------------
  8686. INT 2F - DR DOS 6.0 TaskMAX - COPY DATA DIRECTLY INTO PASTE BUFFER
  8687.     AX = 2718h
  8688.     CX = bytes in source buffer
  8689.     DS:SI -> source buffer (plain ASCII, lines terminated with CR LF)
  8690. Return: AX = 0000h if function supported
  8691.         CX = bytes actually copied
  8692.         DX = current generation number for paste buffer
  8693. BUG:    Novell DOS 7 TASKMGR returns AX=0000h even though it does not support
  8694.       this call (it does support the remainder of the TaskMAX API)
  8695. SeeAlso: AX=2712h,AX=2716h,AX=2717h
  8696. --------T-2F2719-----------------------------
  8697. INT 2F - Novell DOS 7 TaskMGR - NOP
  8698.     AX = 2719h to 271Bh
  8699. --------T-2F271C-----------------------------
  8700. INT 2F U - Novell DOS 7 TaskMGR - ???
  8701.     AX = 271Ch
  8702.     DX = ???
  8703.         bit 0: ???
  8704. Return: ???
  8705.     ---if DX bit 0 set---
  8706.     AX = 0031h
  8707.     CX = 0000h
  8708. BUG:    if the task switcher is running, and DX bit 0 is set on call, this
  8709.       function will crash because its exit code attempts to pop several
  8710.       registers which are not pushed when DX bit 0 is set
  8711. --------m-2F2780CL01-------------------------
  8712. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  8713.     AX = 2780h
  8714.     CL = 01h (function number)
  8715.     CH = subfunction
  8716.         00h unused
  8717.         Return: CX = status (0002h) (see #2021)
  8718.         01h unused
  8719.         Return: CX = status (0002h) (see #2021)
  8720.         02h ???
  8721.         BX = ??? (0005h-000Fh)
  8722.         Return: CX = status (0000h,0030h) (see #2021)
  8723.         03h allocate ???
  8724.         DX = ???
  8725.         Return: CX = status (0000h,0003h) (see #2021)
  8726.         04h get ???
  8727.         Return: CX = 0000h (successful)
  8728.             BX = selector for EMM386 data segment
  8729.             EBX high word cleared
  8730.         05h ???
  8731.         EDX = ???
  8732.         Return: ???
  8733.         06h return to real mode via triple fault
  8734.         07h debugger break
  8735.         Note:    calls INT 03, then INT 21/AH=02h to output a question
  8736.               mark
  8737.         08h get ???
  8738.         Return: CX = 0000h (successful)
  8739.             EBX = ??? (0 or 2)
  8740.         09h ???
  8741.         0Ah ???
  8742.         0Bh unused
  8743.         Return: CX = status (0002h) (see #2021)
  8744.         0Ch ??? manipulates DOS memory chain
  8745.         0Dh ???
  8746.         EBX = ???
  8747.         EDX = ???
  8748.         Return: ???
  8749.         0Eh ???
  8750.         Return: CX = 0000h (successful)
  8751.             BL = ???     \ or BX = 0000h
  8752.             BH = ???     /
  8753.         0Fh get ???
  8754.         Return: CX = 0000h (successful)
  8755.             EBX = ???
  8756.         10h get and set ???
  8757.         EDX = ???
  8758.         Return: CX = 0000h (successful)
  8759.             EBX = old value of ???
  8760.         11h get ???
  8761.         Return: CX = 0000h (successful)
  8762.             EBX = ??? (0100h)
  8763.         12h get and set ???
  8764.         DX = ???
  8765.         Return: CX = 0000h (successful)
  8766.             AX = old value of ???
  8767.         13h ???
  8768.         Return: CX = status (0000h,003Fh) (see #2021)
  8769.             AX = ???
  8770.         14h ???
  8771.         EDX = ???
  8772.         Return: CX = status (0000h,003Fh) (see #2021)
  8773.         15h ???
  8774.         BX = segment of ???
  8775.         Return: CX = 0000h (successful)
  8776.             BX = segment of ???
  8777.         16h ???
  8778.         17h ???
  8779.         EBX = subfunction (0-2)
  8780.         Return: CX = status (0002h if EBX>2) (see #2021)
  8781.             ???
  8782.         18h unused
  8783.         Return: CX = status (0002h) (see #2021)
  8784. Return: CX = status (most subfunctions)
  8785.     (E)AX and/or (E)BX contain return values, depending on function
  8786. Notes:    called by DPMS.EXE and EMM386.EXE
  8787.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  8788.       because the request is handled on the initial trap to the memory
  8789.       manager caused by INT instructions, this API must be invoked with
  8790.       an actual INT 2F instruction instead of some simulation such as a
  8791.       far call to the address in the interrupt vector table
  8792. SeeAlso: AX=12FFh/BX=0EDCh,AX=2780h/CL=02h,AX=2780h/CL=03h,AX=2780h/CL=04h
  8793.  
  8794. (Table 2021)
  8795. Values for Novell DOS 7 EMM386 function status:
  8796.  0000h    successful
  8797.  0001h    invalid function???
  8798.  0002h    invalid subfunction
  8799.  0003h    ???
  8800.  0004h    invalid ??? index
  8801.  0005h    ???
  8802.  0006h    ???
  8803.  0007h    ???
  8804.  0009h    ???
  8805.  000Ah    ???
  8806.  000Bh    invalid ??? handle
  8807.  000Ch    ???
  8808.  000Dh    ???
  8809.  000Eh    ???
  8810.  000Fh    ???
  8811.  0014h    ???
  8812.  0023h    ???
  8813.  0030h    ???
  8814.  003Fh    ???
  8815. --------m-2F2780CL02-------------------------
  8816. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  8817.     AX = 2780h
  8818.     CL = 02h (function number)
  8819.     CH = subfunction
  8820.         00h ???
  8821.         ???
  8822.         Return: CX = status (0000h,0023h, others???) (see #2021)
  8823.             BX = ??? (0000h if CX=0000h, FFFFh if CX=0023h)
  8824.         Note:    calls func 04h/sf 03h, func 04h/sf 1Eh,func 02h/sf 43h,
  8825.               func 02h/sf 0Bh, and func 04h/sf 01h
  8826.         01h get and clear ???
  8827.         DX = ??? handle or 0000h for default
  8828.         Return: CX = status (0000h,000Bh) (see #2021)
  8829.             EBX = old value of ??? if successful
  8830.             EDX destroyed
  8831.         02h ???
  8832.         DX = index of ???
  8833.         Return: CX = status (0000h,0004h,0005h) (see #2021)
  8834.             EBX = 0000FFFFh on error, 00000000h if successful
  8835.         03h ???
  8836.         DX = index of ???
  8837.         Return: CX = status (0000h,0004h,0006h) (see #2021)
  8838.             BX = FFFFh on error, 0000h if successful
  8839.         04h ???
  8840.         Return: CX = status (0000h,0007h,000Ah) (see #2021)
  8841.         05h ???
  8842.         EDX -> ??? data (first 8 bytes seem to be name)
  8843.         Return: CX = status (0000h,0009h,000Dh) (see #2021)
  8844.         06h ???
  8845.         Note:    calls fn 02h/subfn 05h, then fn 02h/subfn 40h
  8846.         07h ???
  8847.         EDX = ???
  8848.         Return: CX = status (0000h,0009h,000Eh) (see #2021)
  8849.         08h ???
  8850.         EDX = ???
  8851.         Return: CX = status (0000h,0009h,000Eh) (see #2021)
  8852.         09h ???
  8853.         EDX = ???
  8854.         Return: CX = status (0000h,0009h,000Fh) (see #2021)
  8855.         0Ah ???
  8856.         EDX = ???
  8857.         Return: CX = status (0000h,0009h,000Fh) (see #2021)
  8858.         0Bh ???
  8859.         DX = ???
  8860.         Return: CX = 0000h (successful)
  8861.         0Ch ???
  8862.         Return: CX = 0000h (successful)
  8863.         0Dh ???
  8864.         Return: CX = status (0000h,0023h) (see #2021)
  8865.             BX = FFFFh on error, 0000h if successful
  8866.         Note:    calls fn 04h/subfn 03h, fn 04h/subfn 1Eh,
  8867.               fn 02h/subfn 43h, fn 02h/subfn 0Bh, fn 04h/sub 01h
  8868.         0Eh ???
  8869.         ???
  8870.         Return: CX = status (0000h,000Ch) (see #2021)
  8871.             EBX = ??? if successful
  8872.         0Fh ???
  8873.         BX = ???
  8874.         DX = ??? handle or 0000h for default
  8875.         Return: CX = status (0000h,000Bh) (see #2021)
  8876.         10h get ??? handle
  8877.         Return: CX = 0000h (successful)
  8878.             BX = handle of default ???
  8879.             EBX high word cleared
  8880.         11h ???
  8881.         DX = ??? handle or 0000h for default
  8882.         BX = ??? (handle???)
  8883.         Return:    CX = status (0000h,000Bh,0014h) (see #2021)
  8884.         12h ???
  8885.         BX = ???
  8886.         DX = ???
  8887.         Return: CX = 0000h (successful)
  8888.         13h ???
  8889.         DX = ???
  8890.         Return: CX = status (see #2021)
  8891.         14h ???
  8892.         BX = ???
  8893.         DX = ???
  8894.         Return: CX = status (0000h,0014h) (see #2021)
  8895.             BX = FFFFh on error, ??? if successful
  8896.         15h set ??? flags
  8897.         BX = ??? (low two bits only)
  8898.         DX = ??? handle or 0000h for default
  8899.         Return: CX = status (0000h,000Bh) (see #2021)
  8900.             BX = new value of ??? flags (entire word)
  8901.             EBX high register cleared
  8902.         16h clear ??? flag for default ???
  8903.         Return: CX = 0000h (successful)
  8904.         17h ???
  8905.         18h ???
  8906.         19h ???
  8907.         1Ah ???
  8908.         1Bh ???
  8909.         1Ch ???
  8910.         1Dh ???
  8911.         1Eh ???
  8912.         1Fh ???
  8913.         20h ???
  8914.         21h ???
  8915.         22h ???
  8916.         23h ???
  8917.         24h ???
  8918.         25h ???
  8919.         26h ???
  8920.         27h ???
  8921.         28h ???
  8922.         29h ???
  8923.         2Ah ???
  8924.         2Bh ???
  8925.         2Ch ???
  8926.         2Dh ???
  8927.         2Eh ???
  8928.         2Fh ???
  8929.         30h ???
  8930.         31h ???
  8931.         32h ???
  8932.         33h ???
  8933.         34h ???
  8934.         35h ???
  8935.         36h ???
  8936.         37h ???
  8937.         38h ???
  8938.         39h ???
  8939.         3Ah ???
  8940.         3Bh ???
  8941.         3Ch ???
  8942.         3Eh ???
  8943.         3Fh ???
  8944.         40h ???
  8945.         41h ???
  8946.         42h ???
  8947.         43h ???
  8948.         44h ???
  8949.         45h ???
  8950.         46h ???
  8951.         47h ???
  8952. Return: CX = status (most subfunctions)
  8953.     (E)AX and/or (E)BX contain return values, depending on function
  8954. Notes:    called by DPMS.EXE and EMM386.EXE
  8955.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  8956.       because the request is handled on the initial trap to the memory
  8957.       manager caused by INT instructions, this API must be invoked with
  8958.       an actual INT 2F instruction instead of some simulation such as a
  8959.       far call to the address in the interrupt vector table
  8960. SeeAlso: AX=12FFh/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=03h,AX=2780h/CL=04h
  8961. --------m-2F2780CL03-------------------------
  8962. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  8963.     AX = 2780h
  8964.     CL = 03h (function number)
  8965.     CH = subfunction
  8966.         00h ???
  8967.         01h ???
  8968.         02h ???
  8969.         03h ???
  8970.         04h ???
  8971.         05h ???
  8972.         06h ???
  8973.         07h ???
  8974.         08h ???
  8975.         09h ???
  8976.         0Ah ???
  8977.         0Bh ???
  8978.         0Ch ???
  8979.         0Dh ???
  8980.         0Eh ???
  8981.         0Fh ???
  8982.         10h ???
  8983.         11h ???
  8984.         12h ???
  8985.         13h ???
  8986.         14h ???
  8987.         15h ???
  8988.         16h ???
  8989.         17h ???
  8990.         18h ???
  8991.         19h ???
  8992.         1Ah ???
  8993.         1Bh ???
  8994.         1Ch ???
  8995.         1Dh ???
  8996.         1Eh ???
  8997.         1Fh ???
  8998.         20h ???
  8999.         21h ???
  9000.         22h ???
  9001.         23h ???
  9002.         24h ???
  9003.         25h ???
  9004.         26h ???
  9005.         27h ???
  9006.         28h ???
  9007.         29h ???
  9008.         2Ah ???
  9009.         2Bh ???
  9010.         2Ch ???
  9011.         2Dh ???
  9012.         2Eh ???
  9013.         2Fh ???
  9014.         30h ???
  9015.         31h ???
  9016.         32h ???
  9017.         33h ???
  9018.         34h ???
  9019.         35h ???
  9020.         36h ???
  9021.         37h ???
  9022. Return: CX = status (most subfunctions)
  9023.     (E)AX and/or (E)BX contain return values, depending on function
  9024. Notes:    called by DPMS.EXE and EMM386.EXE
  9025.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  9026.       because the request is handled on the initial trap to the memory
  9027.       manager caused by INT instructions, this API must be invoked with
  9028.       an actual INT 2F instruction instead of some simulation such as a
  9029.       far call to the address in the interrupt vector table
  9030. SeeAlso: AX=12FFh/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=04h
  9031. --------m-2F2780CL04-------------------------
  9032. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  9033.     AX = 2780h
  9034.     CL = 04h (function number)
  9035.     CH = subfunction
  9036.         00h ???
  9037.         01h ???
  9038.         02h ???
  9039.         03h ???
  9040.         04h ???
  9041.         05h ???
  9042.         06h ???
  9043.         07h ???
  9044.         08h ???
  9045.         09h ???
  9046.         0Ah ???
  9047.         0Bh ???
  9048.         0Ch ???
  9049.         0Dh ???
  9050.         0Eh ???
  9051.         0Fh ???
  9052.         10h ???
  9053.         11h ???
  9054.         12h ???
  9055.         13h ???
  9056.         14h ???
  9057.         15h ???
  9058.         16h ???
  9059.         17h ???
  9060.         18h ???
  9061.         19h ???
  9062.         1Ah ???
  9063.         1Bh ???
  9064.         1Ch ???
  9065.         1Dh ???
  9066.         1Eh ???
  9067.         1Fh ???
  9068.         20h ???
  9069.         21h ???
  9070.         22h ???
  9071.         23h ???
  9072.         24h ???
  9073.         25h ???
  9074.         26h ???
  9075.         27h ???
  9076.         28h ???
  9077.         29h ???
  9078.         2Ah ???
  9079.         2Bh ???
  9080.         2Ch ???
  9081.         2Dh ???
  9082.         2Eh ???
  9083.         2Fh ???
  9084.         30h ???
  9085.         31h ???
  9086.         32h ???
  9087. Return: CX = status (most subfunctions)
  9088.     (E)AX and/or (E)BX contain return values, depending on function
  9089. Notes:    called by DPMS.EXE and EMM386.EXE
  9090.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  9091.       because the request is handled on the initial trap to the memory
  9092.       manager caused by INT instructions, this API must be invoked with
  9093.       an actual INT 2F instruction instead of some simulation such as a
  9094.       far call to the address in the interrupt vector table
  9095. SeeAlso: AX=12FFh/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  9096. --------m-2F2780CL05-------------------------
  9097. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  9098.     AX = 2780h
  9099.     CL = 05h
  9100.     ???
  9101. Return: ???
  9102. Notes:    called by DPMS.EXE and EMM386.EXE
  9103.     the handler for this function may be set by one of the subfunctions
  9104.       of AX=2780h/CL=01h; the default handler returns AX=BX=FFFFh and
  9105.       CX=0001h (see #2021)
  9106.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  9107.       because the request is handled on the initial trap to the memory
  9108.       manager caused by INT instructions, this API must be invoked with
  9109.       an actual INT 2F instruction instead of some simulation such as a
  9110.       far call to the address in the interrupt vector table
  9111. SeeAlso: AX=12FFh/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  9112. --------m-2F2780CL06-------------------------
  9113. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  9114.     AX = 2780h
  9115.     CL = 06h
  9116.     ???
  9117. Return: ???
  9118. Notes:    called by DPMS.EXE and EMM386.EXE
  9119.     the handler for this function may be set by one of the subfunctions
  9120.       of AX=2780h/CL=01h; the default handler returns AX=BX=FFFFh and
  9121.       CX=0001h (see #2021)
  9122.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  9123.       because the request is handled on the initial trap to the memory
  9124.       manager caused by INT instructions, this API must be invoked with
  9125.       an actual INT 2F instruction instead of some simulation such as a
  9126.       far call to the address in the interrupt vector table
  9127. SeeAlso: AX=12FFh/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  9128. --------m-2F2780-----------------------------
  9129. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  9130.     AX = 2780h
  9131.     CL = function (07h-0Fh)
  9132.     ???
  9133. Return: ???
  9134. Notes:    called by DPMS.EXE and EMM386.EXE
  9135.     the handlers for each of these functions may be set individually by
  9136.       one of the subfunctions of AX=2780h/CL=01h; the default handlers
  9137.       return with all registers unchanged
  9138.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  9139.       because the request is handled on the initial trap to the memory
  9140.       manager caused by INT instructions, this API must be invoked with
  9141.       an actual INT 2F instruction instead of some simulation such as a
  9142.       far call to the address in the interrupt vector table
  9143. SeeAlso: AX=12FFh/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  9144. --------T-2F2781-----------------------------
  9145. INT 2F U - Novell DOS 7 TaskMGR - BEGIN CRITICAL SECTION???
  9146.     AX = 2781h
  9147. Return: ???
  9148. SeeAlso: AX=2782h
  9149. --------T-2F2782-----------------------------
  9150. INT 2F U - Novell DOS 7 TaskMGR - END CRITICAL SECTION???
  9151.     AX = 2782h
  9152. Return: ???
  9153. SeeAlso: AX=2781h
  9154. --------m-2F2783-----------------------------
  9155. INT 2F U - Novell DOS 7 - EMM386.EXE - GET ???
  9156.     AX = 2783h
  9157. Return: AX = ???
  9158.     BX = ???
  9159. --------T-2F278F-----------------------------
  9160. INT 2F U - Novell DOS 7 TaskMGR - ??? API
  9161.     AX = 278Fh
  9162.     as for INT 2F/AX=2780h
  9163. Return: as for INT 2F/AX=2780h
  9164. Note:    Novell DOS 7 TaskMGR passes this call through to INT 2F/AX=2780h
  9165.       without changing any other registers
  9166. SeeAlso: AX=2780h,AX=2782h
  9167. --------F-2F2A-------------------------------
  9168. INT 2F - Gammafax DOS Dispatcher INTERFACE
  9169.     AH = 2Ah
  9170. Note:    details not available at this time
  9171. SeeAlso: AX=8000h"FaxBIOS",AX=C000h/BX=444Bh,AX=CB00h,AX=CBDDh,INT 66"BitFax"
  9172. --------V-2F2E00-----------------------------
  9173. INT 2F U - Novell DOS 7 - GRAFTABL - INSTALLATION CHECK
  9174.     AX = 2E00h
  9175. Return: AH = FFh if installed
  9176. Note:    this installation check does not follow the usual format of setting
  9177.       AL to FFh
  9178. SeeAlso: AX=2300h,AH=2Eh"GRAFTABL"
  9179. --------V-2F2E-------------------------------
  9180. INT 2F U - Novell DOS 7 - GRAFTABL - GET FONT TABLE
  9181.     AH = 2Eh
  9182.     AL nonzero
  9183. Return: AH = FFh if installed
  9184.         ES:BX -> graphics data (8 bytes per character from 80h to FFh)
  9185. SeeAlso: AX=2E00h,AH=23h"GRAFTABL"
  9186. --------t-2F3900-----------------------------
  9187. INT 2F - Kingswood TSR INTERFACE - COMPATIBILITY MODE
  9188.     AX = 3900h
  9189. Return: AL = status
  9190.         00h not installed
  9191.         FFh one or more TSRs using this interface is installed
  9192.         DX may be destroyed
  9193. Note:    this function is provided to that the multiplex number will appear used
  9194.       to other programs
  9195. SeeAlso: AH=39h/BL=00h
  9196. --------t-2F39--BL00-------------------------
  9197. INT 2F - Kingswood TSR INTERFACE - INSTALLATION CHECK
  9198.     AH = 39h
  9199.     BL = 00h
  9200.     AL = TSR ID number (01h-FFh, currently only 01h-1Bh used) (see #2022)
  9201. Return: AL = status
  9202.         00h not installed
  9203.         FFh installed
  9204.         DX = segment address of resident module
  9205. Note:    All of Kingswood Software's TSRs use this interface.  Usually the
  9206.       resident module is installed by allocating a block of upper memory,
  9207.       setting its owner ID to 000Ah (used by DOS), and filling the MCB name
  9208.       field with the TSR's name.
  9209. SeeAlso: #2023,AX=3900h,AH=39h/BL=01h
  9210.  
  9211. (Table 2022)
  9212. Values for Kingswood TSR ID number:
  9213.  01h    TSR Windows
  9214.  02h    NOBUSY
  9215.  03h    CD STACK
  9216.  04h    DISK WATCH
  9217.  05h    PUSHBP
  9218.  06h    ALIAS
  9219.  07h    KEYMACRO
  9220.  08h    SLOWDOWN
  9221.  09h    ANSIGRAB
  9222.  0Ah    TEE
  9223.  0Bh    FASTMOUS
  9224.  0Ch    EXTWILD
  9225.  0Dh    BREAKOUT
  9226.  0Eh    STOPDISK
  9227.  0Fh    MEMINIT
  9228.  10h    JANUSEXT
  9229.  11h    CAPS
  9230.  12h    ANSI
  9231.  13h    TRAPPER
  9232.  14h    EATMEM
  9233.  15h    WPJOKE
  9234.  16h    SHOWDOS
  9235.  17h    LOGINTS
  9236.  18h    BLANKVGA
  9237.  19h    SWAPEXEC
  9238.  1Ah    SHELL
  9239.  1Bh    TSRGAMES
  9240.  
  9241. Format of Kingswood TSR modules:
  9242. Offset    Size    Description    (Table 2023)
  9243.  00h  4 BYTEs    signature "FTSR"
  9244.  04h    WORD    segment address of this module (used to check validity)
  9245.  06h    WORD    number of words to skip (usually 0000h if no PSP present)
  9246.  08h  N WORDs    module-defined data that must be at a fixed segment offset
  9247.         (usually only a PSP if file access is required)
  9248.      5N BYTEs    interrupt list (see #2024)
  9249.     BYTE    FFh terminator
  9250.  
  9251. Format of Kingswood TSR interrupt list entry:
  9252. Offset    Size    Description    (Table 2024)
  9253.  00h    BYTE    interrupt number (00h-FEh)
  9254.  01h    WORD    offset within segment of DWORD pointer to previous interrupt
  9255.  03h    WORD    offset within segment of begin of interrupt handler code
  9256. --------t-2F39--BL01-------------------------
  9257. INT 2F - Kingswood TSR INTERFACE - REMOVAL CHECK
  9258.     AH = 39h
  9259.     BL = 01h
  9260.     AL = TSR ID number (01h-FFh) (see #2022)
  9261. Return: AL = status
  9262.         00h not ready to be removed
  9263.         FFh resident module may be removed by deassigning the interrupts
  9264.           hooked by the TSR and deallocating the TSR's memory block
  9265.     AH,BX,CX,DX,ES may be destroyed
  9266. SeeAlso: AX=3900h,AH=39h/BL=00h
  9267. --------t-2F39-------------------------------
  9268. INT 2F - Kingswood TSR INTERFACE - APPLICATION-SPECIFIC FUNCTION CALLS
  9269.     AH = 39h
  9270.     BL = function number (02h-FFh)
  9271.     AL = TSR ID number (01h-FFh) (see #2022)
  9272.     CX,DX,SI,DI,DS,ES may contain parameters
  9273.     BH reserved for use by the function dispatcher
  9274. Return: as appropriate for the called function
  9275. SeeAlso: AX=3900h,AH=39h/BL=00h,AX=3901h/BL=02h
  9276. --------r-2F3901BL02-------------------------
  9277. INT 2F - Kingswood TSR Windows - OPEN WINDOW
  9278.     AX = 3901h
  9279.     BL = 02h
  9280. Return: AX = error code (0000h if successful)
  9281.     SI,DI,DS,ES preserved
  9282. Notes:    opens the next TSR window on top of any others.     Only three
  9283.       TSR windows can be opened at any one time.  The three windows
  9284.       are all 40x11 characters, partly overlapping.
  9285. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=03h,AX=3901h/BL=05h,AX=3901h/BL=06h
  9286. --------r-2F3901BL03-------------------------
  9287. INT 2F - Kingswood TSR Windows - HIDE WINDOWS
  9288.     AX = 3901h
  9289.     BL = 03h
  9290. Return: AX = error code (0000h if successful)
  9291.     SI,DI,DS,ES preserved
  9292. Notes:    Hide any visible TSR windows from view.
  9293. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=05h
  9294. --------r-2F3901BL04-------------------------
  9295. INT 2F - Kingswood TSR Windows - SHOW WINDOWS
  9296.     AX = 3901h
  9297.     BL = 04h
  9298. Return: AX = error code (0000h if successful)
  9299.     SI,DI,DS,ES preserved
  9300. Notes:    Re-display all TSR windows after a HIDE WINDOWS call.
  9301. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=03h
  9302. --------r-2F3901BL05-------------------------
  9303. INT 2F - Kingswood TSR Windows - CLOSE WINDOW
  9304.     AX = 3901h
  9305.     BL = 05h
  9306. Return: AX = error code (0000h if successful)
  9307.     SI,DI,DS,ES preserved
  9308. Notes:    Close the last opened TSR window.
  9309. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  9310. --------r-2F3901BL06-------------------------
  9311. INT 2F - Kingswood TSR Windows - SET WINDOW TITLE
  9312.     AX = 3901h
  9313.     BL = 06h
  9314.     DS:SI -> title string
  9315. Return: AX = error code (0000h if successful)
  9316.     SI,DI,DS,ES preserved
  9317. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  9318. --------r-2F3901BL07-------------------------
  9319. INT 2F - Kingswood TSR Windows - POSITION CURSOR
  9320.     AX = 3901h
  9321.     BL = 07h
  9322.     CH = Y coordinate (0-10)
  9323.     CL = X coordinate (0-39)
  9324. Return: AX = error code (0000h if successful)
  9325.     SI,DI,DS,ES preserved
  9326. Note:    the hardware cursor is always disabled when a TSR window is opened;
  9327.       this call only sets a text position
  9328. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=08h,AX=3901h/BL=09h
  9329. --------r-2F3901BL08-------------------------
  9330. INT 2F - Kingswood TSR Windows - DISPLAY STRING
  9331.     AX = 3901h
  9332.     BL = 08h
  9333.     DS:SI -> string
  9334. Return: AX = error code (0000h if successful)
  9335.     SI,DI,DS,ES preserved
  9336. Notes:    The text is not clipped.
  9337.     This routine understands Tab, NewLine and Carriage Return
  9338. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  9339. --------r-2F3901BL09-------------------------
  9340. INT 2F - Kingswood TSR Windows - SCROLL WINDOW
  9341.     AX = 3901h
  9342.     BL = 09h
  9343.     CL = scroll direction: 01h up, FFh down, 00h clear window
  9344. Return: AX = error code (0000h if successful)
  9345.     SI,DI,DS,ES preserved
  9346. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  9347. --------r-2F3901BL0A-------------------------
  9348. INT 2F - Kingswood TSR Windows - SOUND BEEPER
  9349.     AX = 3901h
  9350.     BL = 0Ah
  9351.     DX = sound divisor, or 0 for silence.
  9352.          (divide 1843200 by required frequency to get value for DX)
  9353.     CL = sound length in 18.2 Hz clock ticks
  9354. Return: AX = error code (0000h if successful)
  9355.     SI,DI,DS,ES preserved
  9356. SeeAlso: AH=39h/BL=00h
  9357. --------r-2F3901BL0B-------------------------
  9358. INT 2F - Kingswood TSR Windows - ADD OR REMOVE USER
  9359.     AX = 3901h
  9360.     BL = 0Bh
  9361.     CL = number of users increment: +1 if adding a new user
  9362.                     -1 if removing a user
  9363. Return: AX = error code (0000h if successful)
  9364.     SI,DI,DS,ES preserved
  9365. Note:    the TSR windows resident module may only be removed when the internal
  9366.       user count is zero
  9367. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  9368. --------V-2F3912BL03-------------------------
  9369. INT 2F - Kingswood ANSI display driver - SET COMPATIBILITY MODE
  9370.     AX = 3912h
  9371.     BL = 03h
  9372.     CL = new mode (00h fast, FFh BIOS)
  9373. Return: AL = old compatibility mode
  9374.     SI,DI,DS,ES preserved
  9375. SeeAlso: AX=3900h,AX=3912h/BL=04h
  9376. --------V-2F3912BL04-------------------------
  9377. INT 2F - Kingswood ANSI display driver - SET FLAGS
  9378.     AX = 3912h
  9379.     BL = 04h
  9380.     CL = new flags (see #2025)
  9381. Return: AL = old flags
  9382.     SI,DI,DS,ES preserved
  9383. SeeAlso: AX=3900h,AX=3912h/BL=03h
  9384.  
  9385. Bitfields for Kingswood ANSI flags:
  9386. Bit(s)    Description    (Table 2025)
  9387.  0    do not wrap at end of line
  9388.  1    wait for beeps to end before displaying next character
  9389.  2    do not use graphics cursor
  9390. --------W-2F4000-----------------------------
  9391. INT 2F - Windows 3.x (OS/2 2.x???) - GET VIRTUAL DEVICE DRIVER (VDD) CAPABLTIES
  9392.     AX = 4000h
  9393. Return: AL = video virtualization (see #2026)
  9394. Note:    this function is used by display drivers to find out what capabilities
  9395.       exist for the VDD driver and also trigger the VDD driver to call
  9396.       functions 4005h and 4006h.  This function also gives the Video Driver
  9397.       hardware access to the video registers.
  9398.  
  9399. (Table 2026)
  9400. Values for Windows video virtualization:
  9401.  01h    does not virtualize video access
  9402.  02h    virtualizes the video when in text mode
  9403.  03h    virtualizes the video when in text mode or single plane graphics modes
  9404.  04h    virtualizes the video when in text mode, single plane graphics modes,
  9405.       and VGA multiplane modes
  9406.  FFh    virtualizes the video fully
  9407. --------O-2F4001-----------------------------
  9408. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO BACKGROUND
  9409.     AX = 4001h
  9410. Note:    called by OS/2 when the DOS box is about to be placed in the background
  9411.       and the video driver should save any necessary state
  9412. SeeAlso: AX=4002h,AX=4005h
  9413. --------O-2F4002-----------------------------
  9414. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO FOREGROUND
  9415.     AX = 4002h
  9416. Note:    called by OS/2 when the DOS box is about to be placed in the foreground
  9417.       and the video driver should restore the previously-saved state
  9418. SeeAlso: AX=4001h,AX=4006h
  9419. --------W-2F4003-----------------------------
  9420. INT 2F - Windows 3.x - ENTERING VIDEO DRIVER CRITICAL SECTION
  9421.     AX = 4003h
  9422. Note:    This critical section must be exited within 1 second.
  9423. SeeAlso: AX=4004h
  9424. --------W-2F4004-----------------------------
  9425. INT 2F - Windows 3.x - EXITING VIDEO DRIVER CRITICAL SECTION
  9426.     AX = 4004h
  9427. SeeAlso: AX=4003h
  9428. --------W-2F4005-----------------------------
  9429. INT 2F C - Windows 3.x - SWITCHING DOS TO BACKGROUND
  9430.     AX = 4005h
  9431. Note:    called by Windows when the DOS box is about to be placed in the
  9432.       background and the video driver should save any necessary state
  9433.       information (this may be called only in Standard mode)
  9434. SeeAlso: AX=4001h,AX=4006h
  9435. --------W-2F4006-----------------------------
  9436. INT 2F C - Windows 3.x - SWITCHING DOS TO FOREGROUND
  9437.     AX = 4006h
  9438. Note:    called by Windows when the DOS box is about to be placed in the
  9439.       foreground and the video driver should restore any necessary state
  9440.       information (this may be called only in Standard mode)
  9441. SeeAlso: AX=4002h,AX=4005h
  9442. --------W-2F4007-----------------------------
  9443. INT 2F - Windows 3.x - ENABLE VDD TRAPPING OF VIDEO REGISTERS
  9444.     AX = 4007h
  9445. Note:    used by Windows Standard mode
  9446. --------O-2F4010-----------------------------
  9447. INT 2F - OS/2 v2.0+ - INSTALLATION CHECK / GET VERSION
  9448.     AX = 4010h
  9449. Return: AX = 4010h if OS/2 not installed
  9450.     AX = 0000h for OS/2 Warp 3.0
  9451.     BX = OS/2 version if installed
  9452. Note:    OS/2 Warp 3.0
  9453. SeeAlso: INT 21/AH=30h,INT 21/AX=3306h
  9454. --------O-2F4011-----------------------------
  9455. INT 2F - OS/2 - GET VDD API ENTRY POINT
  9456.     AX = 4011h
  9457.     DS:(E)SI -> ASCIZ name of VDD registered with VDHRegisterAPI
  9458. Return: ES:DI -> breakpoint address to call for VDD API, or 0000h:0000h
  9459. Note:    this function may be invoked from either V86 or protected mode, and
  9460.       will return the appropriate address to call for invoking the VDD
  9461.       in that mode
  9462. SeeAlso: AX=1684h
  9463. --------E-2F4040-----------------------------
  9464. INT 2F - PharLap 286|DOS-Extender Lite v2.5 - ???
  9465.     AX = 4040h
  9466. Return: BX:CX -> ???
  9467. --------!---Section--------------------------
  9468.